操作符(一)
对于整形来说:数据存放内存中其实存放的是补码。
& 按位与
‘’&''是将两个数的二进制补码进行比较,若补码中的对位都为“1”则位“1”,反之为”0“
代码如下:
int main()
{
int num1 = 19;
int num2 = 6;
int ret = num1 & num2;
// 19 -->00000000000000000000000000010011
// 6 -->00000000000000000000000000000110
//ret -->00000000000000000000000000000010 -->2
printf("%d\n", ret);
//打印ret
for (int i = 31; i >=0; i--)
{
printf("%d", (ret >> i) % 2);
}
//打印ret二进制
return 0;
}
"&"牢记有 0 则 0
| 按位或
‘’|''是将两个数的二进制补码进行比较,若补码中的对位都为“0”则位“0”,反之为”1“
这恰好与”&“相仿
代码如下:
int main()
{
int num1 = 19;
int num2 = 6;
int ret = num1 | num2;
// 19 -->00000000000000000000000000010011
// 6 -->00000000000000000000000000000110
//ret -->00000000000000000000000000010111 -->23
printf("%d\n", ret);
//打印ret
for (int i = 31; i >=0; i--)
{
printf("%d", (ret >> i) % 2);
}
//打印ret二进制,以验证
return 0;
}
"|"牢记有 1 则 1
^ 按位异或
‘’^''是将两个数的二进制补码进行比较,若补码中的对位相同则位“0”,反之为“1”
代码如下:
int main()
{
int num1 = 19;
int num2 = 6;
int ret = num1 ^ num2;
// 19 -->00000000000000000000000000010011
// 6 -->00000000000000000000000000000110
//ret -->00000000000000000000000000010101 -->21
printf("%d\n", ret);
//打印ret
for (int i = 31; i >=0; i--)
{
printf("%d", (ret >> i) % 2);
}
//打印ret二进制,以验证
return 0;
}
“^“牢记相同为"0”,不同为"1”