{
unsigned long long two16, two48 ;
two16 = 65536;
two48 = two16 * two16 * two16 ;
printf("2^48=%llX \n",two48 );
two48 = 1<<48 ;
printf("Shifted 1<<48=%llX \n",two48);
return 0 ;
}
在 64 位機器上編譯時,字長為 8,上面給出了一個警告,two=1<<48 will overflow left shift count >= width of type。
程式的輸出是:
2^48=1000000000000
Shifted 1<<48=0
到底是怎么回事?為什么我不能將 64 位數量移到 48 位?
uj5u.com熱心網友回復:
為什么我不能將 64 位數量移動 48 位?
您不是將 64 位整數移位 48。而是將 32 位整數 ( 1)移位48,并將(溢位)結果分配給 64 位整數。試試這個:
two48 = 1ULL << 48;
或這個:
two48 = 1;
two48 = two48 << 48;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367271.html
