1 / 2
文档名称:

带符号数移位操作运算.doc

格式:doc   大小:29KB   页数:2页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

带符号数移位操作运算.doc

上传人:guoxiachuanyue012 2021/12/6 文件大小:29 KB

下载得到文件列表

带符号数移位操作运算.doc

文档介绍

文档介绍:: .
1. 实验要求
用C/C++编程实现输入一个带符号十进制数,显示其原、反、补三种机器数左、 右移2位的结果
2. 相关知识点
机器字长全部假设为8位,只讨论整数,后不再特殊说明

对于带符号数的移位运算, 符号位不变,只改变 数值位,移位又分为左移和右移,
左移一位相当于该数乘以2,右移一位相当于该数除以2
1. 原码移位
对于正数:左移或右移,符号位不变,数值位中,移出位丢弃,空出位补"0"对 于负数:左移或右移,符号位不变,数值位中,移出位丢弃,空出位补 "0"总结: 甭管正负,补"0"就对了例子:X = [11010110]原左移1位的结果是2X = [10101100]原(丢了符号位后面的1,最后面补了个0),右移1位的结果是-X = [10101011]原(丢了最后面的0,符号位后面补了 0)
2. 反码移位
对于正数:左移或右移,符号位不变,数值位中,移出位丢弃,空出位补"0"
([X]反=[X]原嘛,原码补"0"我反码也补"0")对于负数:左移或右移,符号位不 变,数值位中,移出位丢弃,空出位补"1"(既然原码负数都补"0",造反的反码肯 定都补"1")总结:正补"0"负补"1"例子:X = [11010110]反左移1位的结果是2X =[10101101]反(丢了符号位后面的1,最后面补了个1),右移1位的结果是-x = [11101011]反(丢了最后面的0,符号位后面补了 1)
3. 补码移位
正负数由符号位决定,如 X = -0,[X]补=00000000,我们也把它当正数(嗯数(字) 奸(细))对于正数:左移或右移,符号位不变,数值位中,移出位丢弃,空出位 补"1"( [X]反=[X]补嘛,原码补"0"我补码也补"0") (还记得补码和原码的关系吗,
当X < 0, [X]补=[X]原自低位向高位,尾数的第一个1及其右边的0保持不变,左 位的各位取反) 对于负数:当左移时,符号位不变,数值位中,空出位在最右边,
肯定算在最低位中,补"0"妥妥的,当右移时,符号位不变,空出位在(除符号位) 最左边,因为已经除去-0这个数奸,所以中间至少会遇到一个 1,所以空出位补 "1"。总结:正数补"0",负数左移补"0"右移补"1"例子:X = [11010110]补左移1 位的结果是2X = [10101100]反(丢了符号位后面的1,最后面补了个0),右移1位 的结果是-X = [11101011]反(丢了最后面的0,符号位后面补了 1)
3. 实现思路
1. 准备
包括:
1. 检查输入是否合法,即第一个输入为 "+" 或"-",其后输入为数字
2. 确定输入十进制的正负
3. 将输入的 string 转换为 int 类型
2. 转二进制
由准备工作准备好的 int 类型的数字直接转换为二进制,不过要注意两点,一是当 数字为 0 时,取不到值,这时我们自己手动添个 0 上去,二是当数字为负数时,结 果就很迷 ...解决方法是用其他变量来取数字的绝对值
3. 实现原码移位
原码左移符号位不变,数值位前两位被