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

前端之家收集整理的这篇文章主要介绍了这为什么有效? (在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

猜你在找的C&C++相关文章