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

将十进制的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]&(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

PHP中文网

1左移j位其第几位就是1,&操作是只有1&1才是1。a[i]&(1<<j)这样就是保留a[i]第j位的值,其他位都是0。这里的if判断a[i]&(1<<j)是0则输出0,不是输出1。就输出了a[i]的二进制

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号