簡體   English   中英

將32位整數移位32位

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM