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/