“第五十一天”

        无符号整数

计算机硬件在进行无符号整数的加法时,从最低位开始,按位相加,并往更高位进位。

当进行减法时,被减数不变,减数全部按位取反,末位加一(将一个正数变负,或者将一个负数变正),减法变加法,然后和加法运算一样。(之所以要将减法转变为加法,是因为加法电路造价便宜,减法电路造价昂贵,若将减法转变为加法,省钱。)

        带符号整数

带符号整数有原码,反码,补码之分,这个是无符号整数所没有的。

原码

1、符号位“0/1”对应“正/负”,剩余的数值位表示真值的绝对值;

2、真值 0 有两种表示形式:+0 . -0 ,+0的原码是 0,000 0000 (机器字长为 8 时,逗号是用来划分符号位和数值位的),  -0 : 1,000 0000;

若指明机器字长 ,常见的书面写法是 :(8bit,值为-19为例)  1,0010011   ;但若未指明机器字长,也可以写成 : 1,10011   (高位不用补零)。

对于原码而言,符号位不能参与运算,所以需要设计复杂的硬件电路才能处理,总之就是也很费钱,补码的出现应该就是为了方便计算机处理,贫穷推动科技发展.....

原,反,补码之间的相互转换:

正数: 原码,反码,补码都是一样的;

负数: 原码转化成反码 :符号位不变,数值位取反  ;  反码转化为补码,只需要在末位加一就可以。(这个还有个比较快捷的方法,原码,补码的相互转化,只需要从右往左找到第一个 1 ,然后这个 1 左边的所有 “数值位” 都按位取反,没有符号位,注意这个转化是双向都可以的)。

这里需要注意补码的数值位不能解读为位权,就是说,比如 1111 1111,这个数,其最低为不再表示2的零次方,第二位也不再表示 2 的一次方 ,但其实正数好像也没有什么问题,毕竟和原码是一样的。

计算机硬件进行补码的加法处理: 从最低位开始,按位相加(包括符号位),并往更高位进位。

对于补码的减法运算,实际上也是把减法转变为加法,而且处理方法和无符号整数是一样的。

一个数的补码和它相反数补码的关系是:全部位按位取反(包括符号位),末位+1;

        原码,反码 ,补码的基本特征总结:

对于原码和反码而言,只是形式上有所不同,但对于相同位数能表示的范围都是一样的,而且真值 0 的表示都是两种,正负0 ,反码的是全 1和全 0 表示 真值 0 .

但对于补码而言,其表示范围在相同位数下比原,反码多一个,就是符号位为1 ,其他位全为 0的情况,  1,000... 000,这个值表示的是负的2的n次方,n是位数。所以对于补码而言,真值 0 ,只有一种表示形式,那就是全为 0 的情况。

        移码:(这个之前没有接触过,也可能忘了,注意)

移码就是在补码的基础上将符号位取反(只有符号位注意),其余不变,而且移码只能用于表示整数。   移码所能表示的整数范围和补码是一样的,真值 0 也只有一种形式。(这个其实就是浮点数的那个阶码,就是float型里面那个要加127的那部分,不过那个偏置值和这里不一样,要对减1)

用移码表示的整数很方便用硬件电路对比大小;

        定点数;

定点数可以分为定点整数和定点小数,定点整数就是带符号整数。

对于定点整数,小数点的位置在数值部分的后面,1000 0000.  ,这个点就是小数点,位置在数值部分的后面,其编码表示可以是原,反,补,移

对于定点小数,小数点的位置隐含在符号位的后面, 1.000 0000 ,1后面有个点,这个点就是小数点,位置在符号位后面,1是符号位,表示该值为负,其编码表示可以是原,反,补。但这里就有个疑问,定点小数的小数点既然在符号位后面,那定点小数是不是就是小于1的。

“第五十一天”_第1张图片

嗯,那就是了。

定点小数的原,反,补码的相互转换和定点整数是一样的,这里定点小数的原码和反码的真值 0 也都是两种形式,原码就是还是,符号位为 1/0 ,其他位为 0,反码还是全 1 ,或者全 0,和定点整数一样, 定点小数的补码也只有一种,那就是全 0, 所以也会比原码和反码多表示一个数,就是符号位为 1,数值位全 0 的时候,这个时候表示 -1(最小值)。

定点小数和定点整数在进行位数扩展时,扩展位置不一样,定点小数时在数值位的最后补 0 ,定点整数是在数值位的最前面补 0;

        奇偶校验码

在进行数据传送的时候可能发生位错误,让0变成1,或者1变成0,比如我用 00 代表 a ,01代表b ,然后向其他人传送ab,就是 00 01 ,但在传送过程中,1可能变成了 0 ,那么对面接收的就是aa,而不是我发出的ab,所以加入了校验。

奇校验码:整个校验码(有效信息位和校验位)中 1 的个数为奇数。

偶校验码:整个校验码(有效信息位和校验位)中 1 的个数为偶数。

对于奇偶校验码,其第一位是奇偶校验位,后面的才是有效信息位

但是对于这种当出现的错误是偶数个的时候,是没有办法校验出来的,

比如 原本编码是  1001 101 对应的奇校验码就是 1 1001 101(当然也可以变成偶校验码),如果传送过程中出现某一位变化 变成了 1 1101 101 ,那么就可以检测出错误,但是如果有偶数个发生变化,如变成 1 1111 101 ,那么 1 的个数还是奇数个,那么错误就无法检测出来。

对于偶校验的硬件实现,是将各信息进行异或(模2加)运算,得到的结果即为偶校验位.

异或就是两个全 0 ,或全1 为 0 ,一 1 一 0 为 1.

所以进行偶校验的时候就是将所有位进行异或,若结果为 1 则说明出错了。

后面就做了几道题,就不发了。

你可能感兴趣的:(1024程序员节)