位運(yùn)算常見操作
判斷奇偶
-
(x & 1) == 1==x % 2 == 1判斷奇數(shù) -
(x & 1) == 0==x % 2 == 0判斷偶數(shù)
位運(yùn)算除法
x / 2 == x >> 1
>>> 為無符號(hào)右移,高位補(bǔ)0。>>為有符號(hào)右移,正數(shù)高位補(bǔ)0,負(fù)數(shù)高位補(bǔ)1。
獲取二進(jìn)制最右邊的 1 :x & (-x)
- 求補(bǔ)碼的方式:按位取反加1
- 取完補(bǔ)碼之后,可以看出,結(jié)果是最右邊的 1 不動(dòng),然后其他所有位都按位取反。
- 要清楚,計(jì)算機(jī)計(jì)算負(fù)數(shù)的時(shí)候,會(huì)求其補(bǔ)碼,正數(shù)的補(bǔ)碼是自己本身,負(fù)數(shù)的補(bǔ)碼就是上面的求法,這樣互為相反數(shù)的兩個(gè)補(bǔ)碼進(jìn)行
&,就會(huì)得到最后一位 1 ,其前面和后面的1都會(huì)被過濾掉,后面的0會(huì)保留,形成新的二進(jìn)制數(shù)。
將二進(jìn)制最右邊的 1 去掉: x & (x - 1)
- 首先要了解
x - 1會(huì)發(fā)生什么,從二進(jìn)制的角度,這會(huì)影響最后的1以后的數(shù)位,前面不會(huì)影響。然后 -1 之后,最右邊的 1 變成 0,后面的0都會(huì)變成 1。 - 然后
&操作,結(jié)果上就是把 最右邊的 1 去掉。

