有关唐老师书中移码和补码符号位的争议

本文针对知乎上关于唐朔飞《计算机组成原理》书中算术左移(SAL)符号位不变的争议进行探讨。在X86架构中,算术左移与逻辑左移使用相同操作码,空缺位补0,这与书中描述不符。同时,文章指出补码是有符号位的,且在有符号数运算中,最高位(符号位)始终存在。讨论了不同表示法(原码、补码、反码、移码)中符号位的重要性,并提及计算机如Unisys ClearPath Dorado系列使用反码运算。最后,作者鼓励读者对教材中的疑点进行自我验证和讨论。
摘要由CSDN通过智能技术生成

        写这篇文章源于知乎上一个回答帖,答主说唐朔飞老师的《计算机组成原理》书中对于算术左移(SAL)符号位不变的说法是错的,而且补码没有符号位(sign bit)。我查了些资料,对这两个问题做点解释:

1、算术左移和逻辑左移在X86中拥有相同的操作码(参见https://www.felixcloutier.com/x86/sal:sar:shl:shr),所以x86计算机只有一种左移操作,空缺位都是补0。有一种说法是算术左移会触发算数溢出(arithmetic overflow)而逻辑左移不会,比如说C11中规定无符号数运算不会溢出(结果模与2的n次幂)。所以唐老师书中对移位的解释至少是不符合x86体系的计算机的。那么问题来了,左移位中,由于x86中用补码进行有符号数的运算,所以反码的左移位空缺位到底补0还是补1在运算中根本也不会碰到(估计在用反码进行算数运算的机器里,左移操作确实是补充1),这里我没再去深究;但是书中说的算数移位重要的特点:移位后符号位不变,在左移这里就不成立了。我们回忆一下书中用到算数左移的地方:在有符号数的四则运算里,乘法只涉及右移操作,而除法中对余数的左移,书中说原码在用双符号位(变形补码)表示时,可以使用算术左移,并且强调符号位不变,次高位符号位可被第一位数值位占用。在补码除法中,商的符号位在求商过程中自动形成,所以这里肯定默认使用算术左移。关于这两点说法,前者书中没有举例࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值