我们发现一些奇怪的值被产生了,以下是一个小的测试案例。
这段代码输出的是"FFFFFFFFF9A64C2A"。这意味着无符号长整型似乎已经进行了符号扩展。
但是为什么?
下面所有的类型都是无符号的,那么是什么在进行符号扩展?
期望的输出应该是 "F9A64C2A"。
#include <stdio.h>
int main(int argc,char *argv[])
{
unsigned char a[] = {42,76,166,249};
unsigned long long ts;
ts = a[0] | a[1] << 8U | a[2] << 16U | a[3] << 24U;
printf("%llX\n",ts);
return 0;
}
x << y
的类型与y
的类型无关。 - Dietrich Epp