2009-10-22 62 views
1

我該如何在C/C++中執行此操作? 比方說,我想將i左移兩次,並將值存儲在f中。邏輯左移

f = i << 2; 

這是正確的嗎?

我不需要這一個程序或任何東西,我在它的工作原理只是感興趣。謝謝。

+4

是的,這正是如何執行左位移。 – 2009-10-22 00:21:02

+0

非常感謝。 – nullArray 2009-10-22 00:21:34

回答

9

是的。

f = i << 2 

輪班在很多位操作中很有用。

這曾經是四乘一數的好方法。但是,現在,優化編譯器往往會爲您處理這些問題。

請記住,最左邊的兩個位被丟棄。

+3

對於Intel CPU,移出操作數的最後一位存儲在進位標誌中。這並沒有增加相關的討論,我只是想說。 – dreamlax 2009-10-22 02:56:05

0

爲了完整起見,以幫助你與你的位操作,你可以看看這個頁面:​​

3

是,i << 2f = i << 2,或f <<= 2萬物都是一個可能想要做移位。

更多轉向的事情要記住:

  • 你有>>爲好。在位級,>>對簽名和未簽名類型的工作方式不同。

  • <<>>優先級低於的+-,這愚弄一些人,如人們想象他們更像*/

+0

我知道這是非常隨意的,但我只是想讓你知道,這個響應打開了一個lighbulb,幫助我修復了編寫代碼時遇到的最令人沮喪的錯誤。我將簽名字符的所有實例都更改爲無符號字符,並修復了錯誤。 – pg1989 2012-03-02 23:01:54

5

作爲附加的註釋:即使你的問題被標記C++,它可能是值得注意的是,C和C++採取略有不同的路徑對於換擋負值。在C++中,對負值執行<<>>的結果是實現定義的。在C >>是實現定義的,而<<產生未定義的行爲