我们发现了一些奇怪的值正在生成,下面是一个小测试用例。 这会打印“FFFFFFFFF9A64C2A”。这意味着无符号的long long似乎已经被延长了。 但是为什么? 以下所有类型都是无符号的,所以什么是符号扩展?预期的输出 将是“F9A64C2A”。使用无符号long long的符号扩展
#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;
}
小修正:'a [1]'具有'unsigned char'类型。 –
@ user964970:再次阅读。 'x << y'的类型与'y'的类型无关。 –
@Dietrich Epp:谢谢。 –