1. 程式人生 > ><< 只有對數值右端的5位才有用 這樣可以防止我們移位超過int型別所具有的位數

<< 只有對數值右端的5位才有用 這樣可以防止我們移位超過int型別所具有的位數

轉自:http://bbs.csdn.net/topics/190065386

-->移位操作符操作的運算物件是二進位制的“位”,int型別是32位也就是2的5次冪!如果移32位以上,那麼原來的數的資訊會全部丟失,這樣也就沒有什麼意義了!所以上面的“只有右側的5個低位才會有用”說的是:移位操作符右端的那個數(化成二進位制)的低5位才有用,即

X<<y;
是指y的低5位才有用,即不能大於32。而對於long型也是同樣的道理!

因此,如果對一個int型,進行移位,X<<y;當y小於32時,移位後的結果一般都在我們的預料當中;而如果y大於32時,由於移位超出了int所能表示的範圍,這時就先把y化成二進位制數,然後取該二進位制數右端的低5位,再把這5位化成十進位制,此時的這個十進位制就是要對X移動的位數。


例如:intinta=140;
a<<34

System.out.println(Integer.toBinaryString(a<<b));

上面那兩個語句的執行過程是:先把a化成二進位制數:10001100

執行語句a<<34對a左移32位時,先把34化成二進位制:100010,對該二進位制數取右邊5位,即00010,化成十進位制數為2,所以實際上是對a左移兩位。現在,地球人都會知道上面程式的輸出結果是:1000110000