- 计算补码的值
确定正负号
负数:补码 = 反码 + 1(即 “取反加 1”),本质是
模 - 绝对值(n 位模为2ⁿ)。
- 取反+1得到其绝对值
- -1取反直接得到他的原码
- 负数补码的绝对值 = 模 - 补码的十进制值(将补码视为无符号数时的大小)
-
好像是为了更好的计算负数,优化计算机的性能
-
反码,补码存在的意义
反码是把原码取反,因为人们想加上一个数,就相当于加上一个相反数,就像(-5)+ 5 = 0,而(5)0101 +(-5的反码) 1010 = 1111(-0的反码)正好少个1
5 - 3 = 0101 +(-3的反码)1100 = 10001
就是引入反码来当做负数,但是会出现问题 反码 = 2^n-1 -绝对值
(5)0101+(-5的补码) 1011=10000(0的补码)
为了用加法统一实现加减法,简化电路设计,为了解决,计算机做减法和引入符号位(正号和负号)的问题
那做减法和引入符号位会出现什么问题呢?
首先我们使用带符号位的原码来计算,最高位表示符号位,1表示正数,0表示负数,那我们有了这些数字,我们用来干什么呢?最简单的肯定是用来简单的运算
好,现在我们开始计算!!!
正常的两个正数加法,两个负数加法肯定是没有问题,嗯,不错,easy
恩,不对,还少了什么?
那当我们开始正数与负数的计算时:
发现了一点不对劲
0001+1001=1010(1+(-1)=-2)
1对-1说,你背着我干了什么?你是不是跟隔壁的……好上了。
算了,回归正题!!怎么写着写着把时间全浪费了
这是为什么会出现这种情况呢?
你想一下十进制的正数减负数是怎么化成加法
比如 3 - 5:
变成3 + (-5)
然后把绝对值大的减去绝对值小的,变成2,最后加上绝对值大的符号。本质还是减法,做不到只按一种计算方式去统一计算方法
原码也是如此,减法无法直接转化为加法,
2801

被折叠的 条评论
为什么被折叠?



