微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这为什么有效? (在c中找到奇数)

for (unsigned int i = 1; i <= 100; i++) {
    if (i & 0x00000001) {
        std::cout << i<<",";
    }
}

为什么(以及如何):if(i& 0x00000001)算出奇数?

解决方法

0x00000001是二进制1,尽管它是用十六进制(base-16)表示法编写的.这是0x部分.

&安培;是逐位’AND’运算符,用于执行二进制数字(位)操作.

我和我1将i的所有二进制数字转换为零,最后一个除外.

将得到的1位数转换为布尔值,直接用if语句进行求值.

下图显示了i的最后16位二进制数字,以及它们发生了什么.

i:   i in binary:        i & 1 in binary:    convert to boolean
---- ------------------- ------------------- ---------------------
1    0000000000000001    0000000000000001    true
2    0000000000000010    0000000000000000    false
3    0000000000000011    0000000000000001    true
4    0000000000000100    0000000000000000    false
5    0000000000000101    0000000000000001    true
6    0000000000000110    0000000000000000    false
7    0000000000000111    0000000000000001    true
8    0000000000001000    0000000000000000    false
...  ...                 ...                 ...
99   0000000001100011    0000000000000001    true
100  0000000001100100    0000000000000000    false

原文地址:https://www.jb51.cc/c/118074.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐