方书

有关数值与码制的一些认识

0
阅读(1775)

  对于二进制、十进制、十六进制以前接触了不少,可是经常不用连他们之间的转换都忘了,不过这些现学现用来得及,但是对于有符号数、无符号数,他们的大小,符号位的涵义,以及有符号数之间的运算一直很模糊:

    1)  一个字节8位二进制数表示,若表示无符号数他的范围是0~255是256个数,若表示有符号数他的范围是-128~+127同样是256个数。以此可以得到字(16位)和双字(32位)的范围:

      因为有符号数的第一位代表的是符号位,也就是说一个字节里面0~127代表是正数0~127,而128~255则是-128~-1的数。

*所以有符号数的负数本身不代表他的大小(-128是个特例),要知道他的大小还得求他的补码,让后加负号。

    2)求补的原理:

 ( 以下例子都是十六进制、一字节)

例如:01求补(安位取反末位加1)得FF

           02求补得FE

           7F求补得81

他们的和都是256 ,这样一个在-128~-1的负数(码制表示为128~255之间)通过求补可以得到在1~128内的一个正数也就是-128~-1的绝对值加负号表示其实际值!!

*所以正数的补码就是其原码也是其真值 ;负数的补码要求补(也就是其所对应的正数安位取反末位加1),相反若负数由补码得到原码真值,要求补(求补后的值为负数的绝对值)。

   3)使用补码做运算:

( 以下例子都是十六进制、一字节)

例如:7F-01=7E:可以是7F+(-01)=7F+FF(-01的补码)=7E

因为一个字节范围为0~255在减法中没有进位如果超出此范围便舍去,所以一个在0~127内的正数加上一个在-128~-1内的负数的绝对值与一个在0~127内的正数加上一个在128~255内的正数的值(超出0~255范围便舍去)是相等的。

第一次哈,欢迎大侠们拍砖!