我在位移和无符号长整型上遇到了问题。这是我的测试代码:
char header[4];
header[0] = 0x80;
header[1] = 0x00;
header[2] = 0x00;
header[3] = 0x00;
unsigned long l1 = 0x80000000UL;
unsigned long l2 = ((unsigned long) header[0] << 24) + ((unsigned long) header[1] << 16) + ((unsigned long) header[2] << 8) + (unsigned long) header[3];
cout << l1 << endl;
cout << l2 << endl;
我原本期望l2的值也是2147483648,但实际上它输出的是18446744071562067968。我猜测第一个字节的位移导致了问题?
希望有人能解释为什么出现这个错误,以及如何修改l2的计算方式以返回正确的值。
提前感谢。
sizeof(unsigned long)
的结果。 - Etienne de Martelsizeof(unsigned long) == 8
,所以像您下面提到的那样是64位。 - Marcello