2011-12-31 372 views
0

我知道這是一個非常簡單的問題,但我無法在Google上找到答案,因爲它忽略了「< <」字符。如果您對我將來如何尋找這樣的事情有任何建議,那也是值得讚賞的。我似乎記得它的某種偏移或某種東西?但我真的不知道這意味着什麼,或者它是如何工作的,不管它是-1還是別的東西,就好像它不知道爲什麼這個人不會只用-1。謝謝num >> 1在C++中的含義是什麼?

+2

*「我似乎記得它的某種移位或某種東西?」* - 你沒有嘗試尋找它?它比'>>'更友好,尤其是如果你追加'C++'。 – 2011-12-31 05:14:41

+0

閱讀 - http://en.wikipedia.org/wiki/Bitwise_operation – adatapost 2011-12-31 05:14:44

+0

雅我沒有意識到我記得它有點與移位有關,直到我已經寫了這個句子,這是最後的,所以我覺得承諾該職位。對不起。使用它的優點是什麼,因爲看起來很難理解它在做什麼,因爲你必須首先將它轉換爲二進制。哦,對不起,它只是除以2,但更快的同樣的事情? JK我現在注意到這個解釋它的最低投票答案。 – emschorsch 2011-12-31 05:19:03

回答

8

它('>>')表示在左操作數是整數類型的上下文中'右移'。對於無符號類型,uvalue >> 1等於除以2並截斷值;它會刪除最低有效位,將每個其他位向下移動一個位置,並在最高位插入0。對於簽名類型和正值,行爲是相同的;如果該值爲負數,則該行爲至多是實現定義的。如果左邊的操作數是一個輸入流,那麼它是一個輸入操作(但不能輸入文字,如1,但可以輸入變量,例如l)。

類似地,'<<'表示在左手操作數是整數類型的情況下的'左移',並且它意味着當左操作數是輸出流時的輸出操作。

當然,如果左邊的操作數是一個類,那麼該操作意味着無論類定義操作的意思。 I/O流是「類定義操作意味着什麼」的特殊情況。注意如果LH操作數是一個N位整數(如果它的類型比int短),那麼它只能移動一個介於0和N-1之間的RH值;任何更大或更小的轉變都會產生未定義的行爲請注意,特別是N移位是未定義的行爲。

有關類和I/O流的註釋不適用於C,但操作數都是整數的情況下,C中的行爲與C++中的行爲相同。

+0

對不起,左手是一個整數變量。 – emschorsch 2011-12-31 05:14:53

1

它的num由一個地方二進制右移。有一個非常好的tutorial here

+0

感謝教程幫助了一堆。 – emschorsch 2011-12-31 05:27:28

0

將幫助的示例: int m=16; //(10000) n=m>>1; //n=(01000)導致n=8十進制。