& 按位与
| 按位或
^ 按位异或~按位取反
运算量只能是整型或字符型的数据,不能为实型数据。
1. 按位与 双目运算符
对应两个二进位均为1时,结果位为1,否则为0。
参与运算的数以补码方式出现。例如:6&5 :
00000110 (6的二进制补码)
&00000101 (5的二进制补码)=
00000100 (1的二进制补码)
可见6&5=4。
int main()
{
int a=6,b=5,c;c=a&b;
printf(" a=%d\n b=%d\n c=%d\n",a,b,c);
}2. 按位或 双目运算符。
只要对应的两个二进位有一个为1,结果位就为1。
参与运算的两个数均以补码出现。
例如:6|5 :
00000110
|00000101
00000111 (7)
可见6|5=7
int main()
{
int a=6,b=5,c;c=a|b;
printf(" a=%d\n b=%d\n c=%d\n",a,b,c);
}
3. 按位异或 双目运算符。
当两对应的二进位相异时,结果为1。
参与运算的数以补码形式出现。
例如6^5 :
00000110
^00000101 =
00000011 (3)
int main()
{
int a=6,b=5,c;
c=a^b;
printf(" a=%d\n b=%d\n c=%d\n",a,b,c);
}
4.按位取反 单目运算符。
假设有一个数~9,计算步骤如下:
9=1001 ,
其补码为01001,
对其取反10110(每一位,包括符号位均取与原来相反的数),这个数是在内存中存放的,现在需要转换成原码,即先减1,然后取其反码得
11010,符号位为1是负数,即 -10
11010,符号位为1是负数,即 -10
按位取反规律:假设有一个数a,则
~a=-(a+1)
可以通过以下代码验证:
main()
{
int a=-2313,c,d;
c=~a;
d=-(a+1);
printf("a=%d\n c=%d\n d=%d\n",a,c,d);
}
{
int a=-2313,c,d;
c=~a;
d=-(a+1);
printf("a=%d\n c=%d\n d=%d\n",a,c,d);
}