将十进制的ip地址转化为二进制的ip地址
ringa_lee
if (a[i]&(1<<j)) 這句話的意思是判斷 a[i] 的第 j 位是否為1。 1 << x 就是將1左移x位元(bit),例如 1 << 3 == 0b1000。
if (a[i]&(1<<j))
a[i]
j
1 << x
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。
a[i] = 111
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] & 1 << 6
用來取得整數變數a[i]的第j位的值,當a[i]&(1j=0時取得第1位的值,j=1時取得第2位的值,依此類推。
在循環中,從msb 到 lsb, 對每一個bit 做測試。 (1<<j)建構bitmask。 a[i]&(1<<j)測試對應bit 是否有被設定為1。
(1<<j)
a[i]&(1<<j)
1
1左移j位其第幾位就是1,&操作是只有1&1才是1。 a[i]&(1
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。用來取得整數變數a[i]的第j位的值,當a[i]&(1j=0時取得第1位的值,j=1時取得第2位的值,依此類推。
在循環中,從msb 到 lsb, 對每一個bit 做測試。
(1<<j)
建構bitmask。a[i]&(1<<j)
測試對應bit 是否有被設定為1
。1左移j位其第幾位就是1,&操作是只有1&1才是1。 a[i]&(1