[英]Shifting a 32 bit integer by 32 bits
我正在拋出一些C代碼,我需要將32位int 32位移位。 當我使用參數n = 0運行此代碼時,不會發生移位。
int x = 0xFFFFFFFF;
int y = x << (32 - n);
為什么這不起作用?
轉移自己的危險。 根據標准,您要做的是未定義的行為 。
C99§6.5.7
3 - 對每個操作數執行整數提升。 結果的類型是提升的左操作數的類型。 如果右操作數的值為負或大於或等於提升的左操作數的寬度,則行為未定義。
換句話說,如果您嘗試將32位值移動超過31位或負數,則結果是未定義的。
根據C89(?)標准草案中的 3.3.7位按位移位算子 :
如果右操作數的值為負或大於或等於提升的左操作數的位寬,則行為未定義。
假設你在編譯代碼的系統上int
是32位,當n
是0時,你正在移位32位。 根據上面的聲明,您的代碼會導致未定義的行為 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.