一、判斷一個數字X的i位是不是1 二、把一個數字二進位下的第i位改成1 三、把一個數字二進位下的最靠右的第一個1改成0(去掉) ...
一、判斷一個數字X的i位是不是1
方法:
if((1 << (i-1)) & x > 0) 原理: 1左移(i-1)位,相當於製造了一個就i位上是1其他位都是0的一個二進位數。將這個數與X進行“與”運算,如果大於0,則代表第i位是1;否則是0例子: x = 13 (1101)2 i = 3 ∴ 1 << (i-1) = 1 << 2 = 1002 = 01002 (補上0) ∴ (1 << (i-1)) & x = 01002 & 11012 = 01002 因為其0100大於0,所以這i位是1
二、把一個數字二進位下的第i位改成1
方法:
x = x | (1 << (i-1))
原理:
與“一”類似,直接看”例子“吧
例子:
x = 13 (1101)2 i = 2
∴ 1 << (i-1) = 1 << 1 = 102 = 00102
∴ x | (1 << (i-1))
= 11012 | 00102
= 11112
三、把一個數字二進位下的最靠右的第一個1改成0(去掉)
方法:
x = x & (x-1)
原理:
十進位下的數減了1後,二進位下的數最右邊的1肯定會變成0,所以通過“與”一下就可以把最靠右的第一個1改成0
例子:
x = 13 (1101)2
∴ x-1 = 12 = 11002
∴ x & (x-1)
= 11012 & 11002
= 11002