我們發現了一些奇怪的值正在生成,下面是一個小測試用例。 這會打印「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:謝謝。 –