我正確地將無符號整數移動32,但它根本不影響數字,爲什麼會發生?右移不能正常工作
int main()
{
unsigned int rnd=2347483648;
cout<<rnd;
rnd=rnd>>32;
cout<<endl<<rnd;
}
當代碼運行時,它顯示rnd兩次,根本沒有任何影響。我相信在右移32位int之後,它不應該顯示爲零嗎?
我正確地將無符號整數移動32,但它根本不影響數字,爲什麼會發生?右移不能正常工作
int main()
{
unsigned int rnd=2347483648;
cout<<rnd;
rnd=rnd>>32;
cout<<endl<<rnd;
}
當代碼運行時,它顯示rnd兩次,根本沒有任何影響。我相信在右移32位int之後,它不應該顯示爲零嗎?
你缺少一個賦值操作符 - 的>>
移位運算符不執行「就地」操作:
rnd = rnd >> 32;
你可以也可以使用複合移位運算符,該運算符應用移位運算並將結果返回給變量:
rnd >>= 32;
然而,在這兩種情況下,在未定義的行爲此代碼的結果,請參閱Shifting a 32 bit integer by 32 bits:
如果右操作數的值是負的或大於或等於所宣傳的寬度左操作數,行爲是未定義的。
因此,您可以從該操作中獲得任何結果。
你foget的值賦給RND
rnd = rnd>>32
位移運算符不會修改原始數據。它只是返回一個修改後的副本。
我覺得這是你的意思辦:
rnd = rnd >> 32;
假設大小的unsigned int
是32位,雖然,這不是一個真正的有用操做。
你忘了分配結果:
rnd = rnd >> 32;
在推廣操作類型位,或更多數量轉移,給不確定的行爲。 unsigned int
通常爲32位,因此,在移動32位或更多位時,通常會應用此處的操作。
這是因爲當移位溢出時,不同處理器的行爲不同,語言設計者不希望通過指定特定行爲來阻止實現使用處理器的內置移位指令。
得愛這些「核心語言功能X不工作」的問題......你不能只是多加註意你正在閱讀的書/教程嗎? – 2014-01-14 13:10:34
呃rnd = rnd >> 32顯示了同樣的結果,我也試過了......但它應該顯示0對嗎? – Ahmed
現在再次看到問題,這是其實的問題.. – Ahmed