c++ - 这段代码中,a[i]&(1<<j)改怎么理解?
ringa_lee
ringa_lee 2017-04-17 15:21:37
0
4
761

将十进制的ip地址转化为二进制的ip地址

ringa_lee
ringa_lee

ringa_lee

全部回覆(4)
黄舟

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 << 60b1000000 ,那麼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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板