use*_*072 6 c++ bitwise-operators
我试图理解条件如何与按位运算符一起工作.检查数字是偶数还是奇数的方法可以通过以下方式完成:
#include <iostream>
#include <string>
using namespace std;
string test()
{
int i = 8; //a number
if(i & 1)
return "odd";
else
return "even";
}
int main ()
{
cout << test();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一部分我不明白if条件是如何工作的.在这种情况下,如果i = 8,则在if语句中,1000 & 1它应该返回1000,其等于8.
如果i = 7,那么在if语句中它应该正在执行111 & 1哪个返回111等于7
为什么if(8)将返回"even"并且if(7)返回"odd"?我想我想要理解if语句在检查为True时是什么以及在处理逐位运算符时应该是什么.
只是当我把这个问题写下来时,这是因为它实际上正在做
for 8: 1000 & 0001 which gives 0
for 7: 0111 & 0001 which gives 1?
Run Code Online (Sandbox Code Playgroud)
Xym*_*ech 16
是的,你在最后一部分是正确的.二进制&并|逐位执行.以来
1 & 1 == 1
1 & 0 == 0
0 & 1 == 0
0 & 0 == 0
Run Code Online (Sandbox Code Playgroud)
我们可以看到:
8 & 1 == 1000 & 0001 == 0000
Run Code Online (Sandbox Code Playgroud)
和
7 & 1 == 0111 & 0001 == 0001
Run Code Online (Sandbox Code Playgroud)
你的test函数可以正确计算一个数字是偶数还是奇数,因为a & 1测试11s中是否有a ,只有奇数.
实际上,在C、C++等主流编程语言中,运算符对整型的每一位&进行运算。AND当且仅当两个操作数的第 n 位都AND等于 1 时,按位中的第 n 位才等于 1。
例如:
8 & 1 =
1000 - 8
0001 - 1
----
0000 - 0
7 & 1 =
0111 - 7
0001 - 1
----
0001 - 1
7 & 5 =
0111 - 7
0101 - 5
----
0101 - 5
Run Code Online (Sandbox Code Playgroud)
因此,AND在偶数 和 之间按位进行运算1将始终相等,0因为只有奇数的最低有效位等于1。
| 归档时间: |
|
| 查看次数: |
17340 次 |
| 最近记录: |