黄舟2017-04-17 15:23:37
if (a[i]&(1<<j))
這句話的意思是判斷 a[i]
的第 j
位是否為1。 1 << x
就是將1左移x位元(bit),例如 1 << 3 == 0b1000
。
我們假設a[i] = 111
是32位,那麼a[i]
的二進位就是0b0000_0000_0000_0000_0000_0000_0110_1111
, 1 << 6
是0b1000000
,那麼a[i] & 1 << 6 == 0b0000_0000_0000_0000_0000_0000_0100_0000
,如果a[i]
的第6位(首位是第0位)是1,那麼a[i] & 1 << 6
的結果就是非0(上面這個例子),如果a[i]
的第6位是0,a[i] & 1 << 6
的結果就是0。
阿神2017-04-17 15:23:37
在循環中,從msb 到 lsb, 對每一個bit 做測試。 (1<<j)
建構bitmask。 a[i]&(1<<j)
測試對應bit 是否有被設定為1
。