1. “>>”
int x = 16; printf("%d\n", x >> 1);
先将x转成二进制 10000
, 不读最后一位, 输出 1000
, 即为8
;
右移一位相当于数值除以2
2. “<<”
int x = 16; printf("%d\n", x << 1);
先将x转成二进制 10000
, 往最后再读取一位(0, 或根据是否已经有移位), 输出 100000
, 即为32
;
左移,若移动位数K等于或大于数据长度N,通常只移动K mod N 位数
左移一位相当于数值乘以2
3.注意
以上不包含溢出情况, 且只有能用在int、short int、long int,可能有错漏。
溢出判断:
- 正溢出:正数相加,结果为负数
- 负溢出:负数相加,结果为正数
4.结论
c语言中"<<"与">>" 被称为整数的位移运算,位移是以“位(bit简写为b)”为单位将数据向左或向右的移动。 (8b = 1B)
5.测试
#include <stdio.h>
int main()
{
int x = 16;
printf("%d\n", x >> 3);
printf("%d\n", x >> 2);
printf("%d\n", x >> 1);
printf("%d\n", x << 3);
printf("%d\n", x << 2);
printf("%d\n", x << 1);
}
结果为
2
4
8
128
64
32