【问题标题】:Bitwise operations on 64-bit data type (long long) in C?C中64位数据类型(long long)的按位运算?
【发布时间】:2013-03-18 22:08:35
【问题描述】:

这是一些代码。

long long bitmap2 = 1;
printf("%d\n", bitmap2 & 1);

输出是 0,但我期待 1。我该如何解决这个问题? (我尝试过 1LL 而不是 1 和 uint64_t 而不是 long long;两者都给出了相同的答案 0。)

【问题讨论】:

    标签: bitwise-operators long-long


    【解决方案1】:

    您目前看到的是未定义的行为;您需要确保格式说明符和参数匹配。所以使用以下之一:

    printf("%lld\n", bitmap2 & 1);
    printf("%d\n", (int)(bitmap2 & 1));
    

    参见例如http://en.cppreference.com/w/c/io/fprintf 获取 printf 的完整文档。

    但是,如果printf 格式字符串与您提供的参数类型不匹配,大多数编译器都会警告您。例如,如果我在 GCC 中使用 -Wall 标志编译您的代码,我会得到以下信息:

    warning: format '%d' expects type 'int', but argument 2 has type 'long long int'
    

    【讨论】:

      【解决方案2】:

      如果你想打印 long long,我认为你应该使用 printf("%d\ll", bitmap2 & 1) 而不是 printf("%d\n", bitmap2 & 1)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-20
        • 2013-09-22
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-01
        相关资源
        最近更新 更多