C中64位数据类型(long long)的按位运算?

时间:2013-03-18 22:08:36

标签: bitwise-operators long-long

这是一些代码。

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

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

2 个答案:

答案 0 :(得分:2)

您目前看到的是未定义的行为;您需要确保格式说明符和参数匹配。因此,请使用以下其中一项:

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

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

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

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

答案 1 :(得分:0)

如果您想打印很长的话,我认为您应该使用printf("%d\ll", bitmap2 & 1)代替printf("%d\n", bitmap2 & 1)