84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
将十进制的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]&(1<<j)的值不为0时,即表示a[i]的第j位为1。j=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<<j)这样就是保留a[i]第j位的值,其他位都是0。这里的if判断a[i]&(1<<j)是0则输出0,不是输出1。就输出了a[i]的二进制
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]&(1<<j)的值不为0时,即表示a[i]的第j位为1。
j=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<<j)这样就是保留a[i]第j位的值,其他位都是0。这里的if判断a[i]&(1<<j)是0则输出0,不是输出1。就输出了a[i]的二进制