原码补码问题?
2.为什么规定1为正,0为负呢?
3.为什正数原码与负数进行运算要与负数的补码进行运算才正确呢?
4.为什么负数的补码取反再加1等于原码呢? 展开
2022-11-11
在计算机系统中,数值,一律用补码来表示和存放。
原码和反码,在计算机中,都是不存在的。
使用补码代表正负数值,可将负数,转换成正数来计算。
这就可以节省硬件,只用加法器,便可实现加减法运算。
补码,是是什么意思? 这得从【补数】谈起。
计算机所计算的位数,是固定的,如八位机。。。
位数限定之后,其计数范围,就有了周期性。
如两位十进制 0~99,周期就是 100(一百)。
那么,减一,就可以用 +99 代替:
25 - 1 = 24
25 + 99 = (一百) 24
舍弃进位,只取两位,这两种算法,功能就是相同的。
这就用正数,代替了负数! 用加法,就实现了减法运算!
99,就是-1 的补数。 计算公式:补数 = 周期 + 负数。
学过三角函数的同学,都知道,函数周期是:2π(360°)。
那么-90°,也可以+270° 来计算。 这也是同样的道理。
一个负角度,怎么计算出“等效的正角度”,大家都会。
-------------------------
计算机用二进制,补数,就改称为:补码。
八位二进制:0000 0000 ~ 1111 1111。
对应十进制:0 ~ 255。
计数周期是:2^8 = 256。
那么,
-1 的补码是 256 + (-1) = 255 = 1111 1111(二进制)。
-2 的补码是:254 = 1111 1110。
。。。
-128 的补码是:128 = 1000 0000。
用不存在的“原码反码取反加一”来求,也是这个结果。
求负数补码的计算公式,也是: 周期 + 该负数。
正数,也可以使用这个公式。但是,计算后,这个周期的数值,
超出了计数范围,就略去了。 最后,还是这个正数。
-------------------------
例如: 7-3 = 4。
用补码的计算过程如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得 (1) 0000 0100 = 4 的补码
舍弃进位,只保留八位作为结果,就求出了 7-3。
-------------------------
原码和反码,在计算机中,都是不存在的,无用的。
它们不过是,计算机老师捧在手中的
2013-07-19
补码的原理,是数学。
并非能用“取反加一”这种简单操作,就能说明白的。
数学中,有些变化规律,具有周期性。
因此,只要了解一个周期内的,就可以了。
比如,三四岁的小孩,只会数一百个数:0~99。
到了 100(10^2),就又重新开始了。
这就是一个周期。
而且,他只会做加法,不会做减法。
那么,你就可以教他:用加法,来计算减法:
25 - 1 = 24
25 + 99 = (一百) 24
不要进位,只保留两位数,此时,+99 就能当做-1 使用。
同理,98 就可以代替-2。
。。。
这些代替负数的正数,就是“负数的补数”。
计算公式:补数=负数+周期(10^n)。
n 是补数的位数。
----------------------
计算机用二进制,这就叫做“补码”了。
8 位 2 进制数是:0000 0000~1111 1111 (十进制 255)。
计数周期就是:2^8 = 256。
那么,-1 的补码,是:-1 + 256 = 255 = 1111 1111。
-2,补码是:-2 + 256 = 1111 1110。
。。。
正数,必须直接去运算,不许变化。
所以,正数,不存在补码。
-----------------------
补码,是很简单的东西。
补码,与原码反码,毫无关系。
用求反加一来求补码,是不会理解补码的意义的。
搞计算机的人,一般都不好好上学,数学水平都很低,讲不清道理,只能弄些烂操作唬人。
2013-07-19