计算机基础--原码、反码、补码
声明:以下⼆进制数据都是指⼋⽐特位长度的⼆进制数;以下⼗进制数都是指的整数。
1、什么是原码?
我们来看⼀下百度百科的定义:
原码(true form)是⼀种计算机中对数字的⼆进制定点表⽰⽅法;
原码表⽰法在数值前⾯增加了⼀位符号位(即最⾼位为符号位):正数该位为0,负数该位为1,其余位表⽰数值的⼤⼩。
举个例⼦:
100的源码怎么表⽰?--答案是:0 110 0100
-100的源码怎么表⽰?--答案是:1 110 0100
此外,还要注意⼀点:
百度百科中看到⼀句话:原码不能直接参加运算,可能会出错。
他举出⼀个例⼦:在数学中 1+(-1)=0;但是⽤⼆进制进⾏计算的时候就会变成:0000 0001+1000 0001=1000 0010,换算成⼗进制是 -2。显然结果是错误的。
2、什么是反码?
反码通常是⽤来由原码求补码、或者由补码求原码的过渡码。
那么同⼀个数的反码与原码的对应关系是什么呢?反码跟原码是正数时,⼀样;负数时,反码就是原码符号位除外,其他位按位取反。
举个例⼦:
100的原码是?0 110 0100
100的反码是?0 110 0100
========
-100的原码是?1 110 0100
-100的反码是?1 001 1011
从上⾯的例⼦来看
I、想知道⼀个⼗进制数的⼆进制反码表⽰形式,得先知道这个⼗进制数的原码。也就是说,原码虽然简单,但却⾮常重要。
II、原码、反码都是数值在计算机中的表⽰⽅法,他们俩⾸位都表⽰符号位,即1为负、0为正;其余的为数值位。原码的数值位的值就是所表⽰数的真值。反码的数值位的意义我们不去深究。
3、什么是补码?
在了解什么是原码的时候,我们就发现了原码在⼆进制加减运算中存在问题。
所以,计算机系统,数值⼀律采⽤补码来表⽰和存储。
原因是,补码能够将符号位和数值位统⼀处理;同时,减法和加法也可以统⼀处理。
这个例⼦解释了以n值为模的系统⾥,减法问题如何转化成加法问题的--把减数⽤相应的补数表⽰就可以了。
⽽这个例⼦中出现的补数的概念,⽤在计算机对于数值的处理上,就是补码。
那么补码和原码的对应关系是怎么样的呢?
I、对于正数,他的原码、反码、补码都是⼀样的,即都是原码的表⽰形式。
⽐如:100的原码 0 110 0100;反码 0 110 0100;补码 0 110 0100。
II、对于负数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变--这不就是求反码的过程么。),然后加1。
⽐如:-100的原码 1 110 0100;除符号位外按位取反 1 001 1011;再加1:1 001 1100(即为-100在计算机中的存储形式--也就是-100的补码)。
III、对于-100求补码的⽅法,还有⼀种:
就是记住这个⼝诀:对负数求补码,先写出其绝对值的原码,再按位取反,再加1。
我们来试⼀下:-100求补码,先出-100的绝对值100的原码:0 110 0100;再按位取反 1 001 1011;再加1: 1 001 1100。
其实这两种,在第⼆步取反的时候,就得到了⼀致的结果了,所以在第三步再加1,得到的结果⼀样。所以上⾯两种⽅法就看个⼈习惯了。。。
IV、对于0的补码是唯⼀的:0000 0000。
(+)0我们就不必说了,符号位为0的正数,原码、反码、补码都⼀样:0000 0000。
(-)0求补码→按位取反→1 111 1111→再加1→1 0000 0000(这⾥我们讲解的是8位⼆进制数,所以最⾼位1舍去)→ 0000 0000 (补码)。
最后总结:原码、反码、补码(以下都是指整数的⼋位⼆进制形式)
对于正数其原码、反码、补码都⼀样。以后遇到正数求补码、反码不要慌,写出原码就是答案。
对于负数其反码=原码(除符号位)按位取反;其补码=负数的原码先取反码再加1。
4、计算机中存储的8位⼆进制数能够表⽰的取值范围为什么是 -128~127
⾸先我们要在脑海中有⼀个概念:我们这⾥所说的⼆进制数是指在计算机中存储的数,⽽在计算机中存储的数是原始数据的补码形式。
负75的补码怎么求有了这个概念为前提,我们就好理解了:
接下来参考⼀下知乎⾥⾯的⼀个回答,更能够帮助我们理解这个范围问题:
以上是对计算机系统中对于数的⼆进制表⽰形式的总结,记录下来,以便以后查看。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论