搜尋

首頁  >  問答  >  主體

c++ - 这段代码中,a[i]&(1<<j)改怎么理解?

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

ringa_leeringa_lee2809 天前759

全部回覆(4)我來回復

  • 黄舟

    黄舟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 << 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。

    回覆
    0
  • 黄舟

    黄舟2017-04-17 15:23:37

    用來取得整數變數a[i]的第j位的值,當a[i]&(1<j=0時取得第1位的值,j=1時取得第2位的值,依此類推。

    回覆
    0
  • 阿神

    阿神2017-04-17 15:23:37

    在循環中,從msb 到 lsb, 對每一個bit 做測試。
    (1<<j)建構bitmask。
    a[i]&(1<<j)測試對應bit 是否有被設定為1

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 15:23:37

    1左移j位其第幾位就是1,&操作是只有1&1才是1。 a[i]&(1<

    回覆
    0
  • 取消回覆