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 举报,一经查实,本站将立刻删除。