1. 程式人生 > >Java移位運算中,數值右端的低5位才有用

Java移位運算中,數值右端的低5位才有用

Java移位運算中,數值右端的低5位才有用

晚上糾結了很久這個問題,不懂為什麼低5位才有用,怎麼就2^5等於32位,跟int的32位掛上鉤了,思考了很久終於明白了。

這段話有兩個出處:
一個是Java程式設計思想3.11移位操作符中出現,原話是“只有數值右端的低5位才有用”。
一個是Java解惑中謎題27:變幻莫測的i值,原話是“移位操作符只使用其右運算元的低5位作為移位長度”。

弄清這句話首先需要弄清楚移位操作符,移位操作符是一個二元操作符,兩個運算元分別位於移位操作兩邊形如:左運算元 移位操作符 右運算元 這樣的結構,其含義是,將左運算元按照移位操作符指定的移位方向,進行右運算元指定的次數的移位。然後對照出處二,Java解惑中所描述的,就豁然開朗了。

首先,移位操作符能操作的數只有int型別和long型別,這個是指左運算元的型別。對於int型別而言,int在Java中佔4位元組,一共32位,也就是說,對於一個在Java中的int資料,做32次移位,那麼這個int資料就完全變了,以左移為例,左移是補0,那麼對於任意一個int型別資料,做32次移位,那麼int資料變成32位全0的資料,Java不允許一次性移位左運算元的所有位,也就是右運算元不能大於32。於是回到上述的句子,其指的是右運算元的低5位,5位二進位制所代表的最大值為2^5-1 = 31,所以取右運算元的低5位,就是隻看右運算元的二進位制的低5位,其數值不會超過32。因此,移位操作符進行移位的實際次數,其實是右運算元2的次數。