了解 C 语言中的移位操作符(代码 + 图) - 右移操作符
最编程
2024-06-30 19:27:13
...
首先右移操作符分为两种:
- 算术右移
- 逻辑右移
移位规则:
- 算术右移:左边用原该值的符号位填充,右边丢弃
- 逻辑右移:左边用0填充,右边丢弃
那么到底是用算术右移还是逻辑右移呢?
主要是取决于编译器的!
我们常见的编译器都是算术右移
算术右移
这里还是拿数字5来举例
正数算术右移
代码示例:
int main()
{
int a = 5;
int b = a >> 1;
printf("%d\n", b);
return 0;
}
运行结果:
1、移动
上面我们已经求出了5
的补码:00000101
看代码给的是向右移动一位
然后:
所以得到新的补码:00000010
2、转换
因为是正数,所以我们直接把00000010
转换成十进制:2
负数算术右移
代码示例:
int main()
{
int a = -5;
int b = a >> 1;
printf("%d\n", b);
return 0;
}
运行结果:
1、移动
上面我们已经求出了-5
的补码:11111011
看代码给的是向右移动一位
然后:
所以得到新的补码:11111101
2、回推
我们得以:补码 ---> 反码 ---> 原码
,这样逆序的过程,推算出原码
所以我们得到了新的原码:10000011
3、转换
10000011
换算成十进制就是:3
但是因为符号位为:1
,0正1负
所以结果为:-3
这就是算术右移的方法,学废了吗?
逻辑右移
逻辑右移的方法和左移操作符有点类似
就是:右边丢弃,左边空的补0
这里就不演示啦!
下一篇: C:比特、字节和字之间的关系