移位操作符
移位操作符
左移操作符 <<
右移操作符 >>
左移和右移针对二进制位进行移位。
左移操作符
移位规则:左边抛弃、右边补0。
eg:
1<<1=2
00000000 00000000 00000000 00000001 1
左移一位
00000000 00000000 00000000 00000010 2
-1<<1=2
11111111 11111111 11111111 11111111 -1
左移一位
11111111 11111111 11111111 11111110 2
#include <stdio.h>
int main()
{
int a = 1;
int b = -1;
printf("%d\n",a << 1);
printf("%d\n",b << 1);
}
右移操作符
右移操作符 移位规则:
首先右移运算分两种:
- 逻辑移位 左边用0填充,右边丢弃。(几乎不用)
- 算术移位 左边用原该值的符号位填充,右边丢弃。
- 警告: 对于移位运算符,不要移动负数位,这个是标准未定义的。
eg:
1>>1=0
00000000 00000000 00000000 00000001 1
右移一位
00000000 00000000 00000000 00000000 0
-1>>1=-1
11111111 11111111 11111111 11111111 -1
右移一位
11111111 11111111 11111111 11111111 -1
#include <stdio.h>
int main()
{
int a = 1;
int b = -1;
printf("%d\n",a >> 1);
printf("%d\n",b >> 1);
}