好的,这是一个奇怪的问题:
- 我正在使用
unsigned long long
变量(我甚至使用过变量long
,效果相同) - 我需要能够存储 64 位整数(
sizeof
返回 8,这很好)
但是,当我尝试使用类似的值1<<63
并执行一些简单的按位运算时,奇怪的是,我似乎得到了负值。为什么?
我的测试代码:
unsigned long long c = 0;
c |= 1l << 56; printf("c = %lld\n",c);
c |= 1l << 63; printf("c = %lld\n",c);
输出 :
c = 72057594037927936
c = -9151314442816847872
旁注:
- 当然,即使我
c = 1l<<63
直接做也会发生同样的事情。 - 所有测试均在 Mac OS X 10.6 上进行,并使用 Apple 的 LLVM Compiler 3.0 编译
有什么建议么?