目录
题目
问题分析
按位与操作符(&)
按位或操作符(|)
按位异或操作符(^)
按位取反操作符(~)
代码及运行结果
题目
学习使用按位与& ,按位或 |,按位异或 ^和按位取反~
问题分析
按位与操作符(&)
对两个二进制数的对应位进行与操作。如果两个位置上的位都是1,则结果为1,否则为0。
0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1
有0则0,同1则1
例如:给定两个二进制数1010和1100,进行按位与操作:
1010 & 1100 -------1000
按位或操作符(|)
对两个二进制数的对应位进行或操作。如果两个位置上的位中至少有一个为1,则结果为1,否则为0。
0 | 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1
有1则1,同0则0
例如:给定两个二进制数1010和1100,进行按位或操作:
1010 | 1100 -------1110
按位异或操作符(^)
对两个二进制数的对应位进行异或操作。如果两个位置上的位不同,则结果为1,否则为0。
0 ^ 0 = 0;
0 ^ 1 = 1;
1 ^ 0 = 1;
1 ^ 1 = 0
相同则0,不同则1
例如:给定两个二进制数1010和1100,进行按位异或操作:
1010 ^ 1100 -------0110
按位取反操作符(~)
将一个二进制数的每个位取反,即将所有的1变为0,将所有的0变为1。
~0 = 1;
~1 = 0
例如:给定一个二进制数1010,进行按位取反操作:
~ 1010 -------0101
代码及运行结果
//按位与&
//0 & 0 = 0; 0 & 1 = 0; 1 & 0 = 0; 1 & 1 = 1#include "stdio.h"
main()
{int a, b;a = 077; // 1110111b = a & 3; // 0000011printf("\40: The a & b(decimal) is %d \n", b);//decimal--十进制b &= 7; // 0000111printf("\40: The a & b(decimal) is %d \n", b);
}
//按位或 | 。
//0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1#include "stdio.h"
main()
{int a, b;a = 077;b = a | 3;printf("\40: The a & b(decimal) is %d \n", b);b |= 7;printf("\40: The a & b(decimal) is %d \n", b);
}
//按位异或 ^ 。
//0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 0#include "stdio.h"
main()
{int a, b;a = 077;b = a ^ 3;printf("\40: The a & b(decimal) is %d \n", b);b ^= 7;printf("\40: The a & b(decimal) is %d \n", b);
}
//按位取反~。
//~0 = 1; ~1 = 0;#include "stdio.h"
main()
{int a, b;a = 234;b = ~a;printf("\40: The a's 1 complement(decimal) is %d \n", b);a = ~a;printf("\40: The a's 1 complement(hexidecimal) is %x \n", a);
}