C中的64位数据类型(long long)的按位运算?
问题描述:
这是一些代码。C中的64位数据类型(long long)的按位运算?
long long bitmap2 = 1;
printf("%d\n", bitmap2 & 1);
输出为0,但我期待1.我该如何解决这个问题? (我已经试过的1LL而不是1和uint64_t中,而不是久长;既给了0相同的答案)
答
我认为你应该使用printf("%d\ll", bitmap2 & 1)
而不是printf("%d\n", bitmap2 & 1)
,如果你想打印一个很长很长。
答
你目前看到的是未定义的行为;你需要确保格式说明符和参数匹配。因此请使用以下选项之一:
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'
感谢 - 这个工作。 – user2184212 2013-03-19 22:58:11