引言
Java中移位運(yùn)算符一共有三種篡石,<<(左移)、>>(右移)西采、>>>(無符號右移)凰萨。下面我分別介紹這三種移位運(yùn)算符是如何操作整型int的。
<<(左移)
左移很簡單械馆,當(dāng)左移n位時胖眷,在其低n位補(bǔ)0即可。當(dāng)左移1位時霹崎,相當(dāng)于乘上2珊搀,如下圖。
對num左移一位
>>(右移)
Java中>>,其實應(yīng)該叫做帶符號右移尾菇,如果int是正數(shù)境析,那么右移后補(bǔ)0,反之為負(fù)數(shù)派诬,右移后補(bǔ)1簿晓。當(dāng)右移1位時,相當(dāng)于除于2千埃,如下圖
當(dāng)num=1時
當(dāng)num=-1時
>>>(無符號右移)
無符號右移就是不管int是正數(shù)還是負(fù)數(shù),全都補(bǔ)零忆植。
當(dāng)num=-1時
移位32位
如果直接移位32位會是什么情況放可,這里很有意思,如果直接移位32位朝刊,數(shù)值不會變化耀里,好像發(fā)生了循環(huán)(但實際上通過上面的補(bǔ)0或補(bǔ)1操作可知,Java中移位運(yùn)算是不會發(fā)生循環(huán)的拾氓。不然也不會補(bǔ)位了冯挎,直接循環(huán)不得了。)咙鞍。但是我同時寫了一個for循環(huán)房官,每次只移位1位,一共移32位续滋,得到的結(jié)果卻和直接移32位不一樣翰守,如下。
num=-10時直接帶符號右移32位
num=-10時每次移1位帶符號右移疲酌,共32位
所以這點要特別注意蜡峰。