c++ - 为什么这有效? (在 C++ 中查找奇数)

标签 c++ bitmask

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

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

最佳答案

0x00000001 在二进制中是 1,尽管它是以十六进制(base-16)表示法编写的。那是 0x 部分。

& 是按位“与”运算符,用于进行二进制数字(位)操作。

i & 1 将 i 的所有二进制数字转换为零,最后一位除外。

将生成的 1 位数字转换为 bool 值非常简单,以便通过 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++ 中查找奇数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1461867/

相关文章:

c++ - 使用 boost 或 std 获取特定时区的当前本地时间

php - 为什么我应该在 PHP 中使用按位/位掩码?

C++ 流位掩码为 boolean 值?

ios - 游戏引擎 Collison 位掩码... 为什么是 0x01 等?

java - 我可以将 0 移到开头吗?

python - 在列表列表中比较列表值的最佳方法是什么?

c++ - 两个文件中相同函数/全局变量的不同声明

c++ - 如何打印出 DECIMAL (tagDEC) 类型的值?

c++ - 返回类型为 struct 的函数在每次调用时不返回任何内容

c++ - 为什么在 C++17 中复制初始化需要析构函数并保证移动/复制省略?