负数的位移(右移)

这里只是针对 右移

(左移对负数,正数 的影响不大,都只需要右边补0即可。)

首先 我们看到的数,都是以二进制的形式在计算机下操作的。并且位运算符的操作对象是补码

正数: 原码=反码=补码

负数: 原码 ----> 反码 (取反) ---->补码 (+1)

如整型 int a =10;
0000 0000 0000 0000 0000 0000 0000 1010 (这个是原码)

因为是正数,所以可以直接操作进行位移。

以负数进行演示:
在这里插入图片描述
计算结果:
在这里插入图片描述

1000 0000 0000 0000 0000 0000 0000 1010 (这个是原码)
这时就要计算出补码了,取反 ,+1。

1.取反(符号位不变
1111 1111 1111 1111 1111 1111 1111 0101
2.+1
1111 1111 1111 1111 1111 1111 1111 0110
3.位移(右移2位)(正数补0,负数补1(左边)
1111 1111 1111 1111 1111 1111 1111 1101

补码这里这个是,所以要在算回去(原码)。
有两种形式:取反 ,+1。 或者 -1 ,取反。

4.取反
1000 0000 0000 0000 0000 0000 0000 0010
5.+1
1000 0000 0000 0000 0000 0000 0000 0011
这个二进制表示: -3

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值