程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c++-關於移位運算的一個問題,十分不解

c++-關於移位運算的一個問題,十分不解

編輯:編程解疑
關於移位運算的一個問題,十分不解

今天發現一個問題, 假如 i = 12, 那麼 j = i >> 32, 則j = 12;但是j = i >> 31,j = j >> 1,則j = 0為什麼呀。

最佳回答:


對於右移大於或等於位寬的操作,或者右移負數的操作,其結果將依賴於編譯器的處理和硬件指令的處理,並不唯一。32正好是一個int變量所占的內存,但這種位移的行為是未定義的。由編譯器決定,所以沒有標准答案。在VC++編譯器上是等於原值的
LZ可以看一下匯編的代碼就會發現,編譯器直接把代碼編譯成了賦值操作,而沒有做移位操作.
所以第一種情況下還是原值,而第二種由於移位小於32位,所以就按正常的移位操作來,就得到了0

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved