(实验二)带符号数移位操作运算


上接 (实验一)十进制整数的原反补移码实现

1. 实验要求

​ 用C/C++编程实现输入一个带符号十进制数,显示其原、反、补三种机器数左、右移2位的结果

2. 相关知识点

机器字长全部假设为 8 位,只讨论整数,后不再特殊说明

0. 移位运算

​ 对于带符号数的移位运算,符号位不变,只改变数值位,移位又分为左移和右移,左移一位相当于该数乘以 2,右移一位相当于该数除以 2

1. 原码移位

​ 对于正数:左移或右移,符号位不变,数值位中,移出位丢弃,空出位补 “0”

​ 对于负数:左移或右移,符号位不变,数值位中,移出位丢弃,空出位补 “0”

​ 总结:甭管正负,补 “0” 就对了

​ 例子:X = [11010110] 原 _原 左移 1 位的结果是 2X = [10101100] 原 _原 (丢了符号位后面的 1,最后面补了个 0),右移 1 位的结果是 1 2 \frac{1}{2} 21X = [10101011] 原 _原 (丢了最后面的 0,符号位后面补了 0)

2. 反码移位

​ 对于正数:左移或右移,符号位不变,数值位中,移出位丢弃,空出位补"0"([X] 反 _反 = [X] 原 _原 嘛,原码补"0"我反码也补"0")

​ 对于负数:左移或右移,符号位不变,数值位中,移出位丢弃,空出位补"1"(既然原码负数都补"0",造反的反码肯定都补"1")

​ 总结:正补"0"负补"1"

​ 例子:X = [11010110] 反 _反 左移 1 位的结果是 2X = [10101101] 反 _反 (丢了符号位后面的 1,最后面补了个 1),右移 1 位的结果是 1 2 \frac{1}{2} 21X = [11101011] 反 ​ _反​ (丢了最后面的 0,符号位后面补了 1)

3. 补码移位

​ 正负数由符号位决定,如 X = -0,[X] 补 _补 = 00000000,我们也把它当正数(嗯数(字)奸(细))

​ 对于正数:左移或右移,符号位不变,数值位中,移出位丢弃,空出位补"1"([X] 反 _反 = [X] 补 _补 嘛,原码补"0"我补码也补"0")

​ (还记得补码和原码的关系吗,当 X < 0,[X] 补 _补 = [X] 原 _原 自低位向高位,尾数的第一个 1 及其右边的 0 保持不变,左位的各位取反)

​ 对于负数:当左移时,符号位不变,数值位中,空出位在最右边,肯定算在最低位中,补"0"妥妥的,当右移时,符号位不变,空出位在(除符

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值