在編寫測試用例中的某些寄存器時,我遇到了這條語句。我是C++新手。對不起,如果這是一個愚蠢的問題。關於C++中的移位運算符及其優先級
base_width = 13; // assume 32 bit number
base_width += (base_width << 6) << 5;
考慮base_width
是一個32位unsigned int
,應該是什麼的base_width
上述執行後的值?我嘗試了不同的編譯器,它給出了不同的結果。根據C++標準,答案是什麼,爲什麼?
你得到了什麼,當你* *跑這(和什麼** **類型爲'base_width'它如果它是一個8位的無符號字符,你會得到零,如果它是一個*符號*整型,如果你轉移到符號位,你會得到未定義的行爲,但是從8位到16位起始值爲13,現在有點不相關)。請更多的代碼和上下文。 – WhozCraig
你得到了什麼結果,以及什麼編譯器? – user4815162342
請注意'(base_width << 6)<< 5'與'base_width << 11'相同。這是很好的定義,如果你在不同的編譯器上得到不同的結果,那麼可能還有別的東西你沒有告訴我們。 –