1.<<左移操作符
先看代码:
#include<stdio.h>
int main()
{
int a = -5;
int b = a << 1;
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
整数在计算机中是以二进制补码的形式存储的
其中正数的原反补都相同,负数的原反补有相应的计算规则:
而左移操作符是将操作数整体左移,并在右边补0
由补码再得到原码也是符号位不变,其他的按位取反。计算的到该二进制补码表示的数为-10
观察结果可以发现,移位操作符并不改变被操作数本身的值。
总结下原反补的换算规则
2.>>右移操作符
看下右移操作符的作用:
右移操作符有两种右移方式:
1):整体右移,左边补0
2):整体右移,左边补符号位
那-3怎么得到的:
说明这里面的右移操作符采用的是算数右移。
对于右移操作符是逻辑右移还是算数右移取决于当前的编译器
很明显,这里我用的编译器是采用的算数右移
3.& 与操作符
4. | 或操作符
5.^ 异或操作符
a=a^b;
b=a^b;
a=a^b;
这样三次异或完成 a 和 b 的值的交换。
应用:
//计算整数的二进制位的1的个数
int main()
{
int n = 0;
scanf("%d", &n);
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (((n >> i) & 1) == 1)
{
count++;
}
}
printf("%d\n", count);
return 0;
}