0.8.1 数值数据的表示
您可以在百度里搜索“Linux/Unix技术丛书·跟老男孩学Linux运维:核心基础篇(上)(第2版) 艾草文学(www.321553.xyz)”查找最新章节!
0.8.1 数值数据的表示
1. 机器数和真值
计算机中使用的是二进制,因此只有0和1这两种值。一个数在计算机中的表示形式,称为机器数。机器数所对应的原来的数值称为真值,由于采用二进制必须将符号数字化,因此通常是利用机器数的最高位作为符号位的,但仅用来表示数符。若该位为0,则表示正数;若该位为1,则表示负数。机器数也有不同的表示方法,常用的机器数共有3种:原码、补码和反码。
机器数的表示方法:用机器数的最高位代表符号(若为0,则代表正数;若为1,则代表负数),其数值位为真值数的绝对值。举例用8位二进制数表示一个数,如图0-39所示。
图0-39 用8位二进制表示一位数
在数的表示中,机器数与真值的区别是:真值带符号如-0011100,机器数不带数符,最高位为符号位,如10011100,其中最高位1代表符号位。
例如,真值数为-0111001,其对应的机器数为10111001,其中最高位为1,表示该数为负数。
2. 原码、反码、补码的表示
在计算机中,符号位和数值位都是用0和1来表示的,在对机器数进行处理时,必须考虑对符号位的处理,也就是对符号和数值的编码方法。常见的编码方法有原码、反码和补码这3种方法。下面分别讨论这3种方法的使用。
(1)原码的表示
一个数X的原码表示为:符号位用0表示正,用1表示负;数值部分为X的绝对值的二进制形式。这里将X的原码表示记为[X]原。
例如,当X=+1100001时,则[X]原=01100001。
当X=-1110101时,则[X]原=11110101。
在原码中,0有两种表示方式,分别如下。
当X=+0000000时,[X]原=00000000。
当X=-0000000时,[X]原=10000000。
(2)反码的表示
一个数X的反码表示方法为:若X为正数,则其反码与原码相同;若X为负数,则在原码的基础上,符号位保持不变,数值位各位取反。这里将X的反码表示记为[X]反。
例如,当X=+1100001时,则[X]原=01100001,[X]反=01100001。
当X=-1100001时,则[X]原=11100001,[X]反=10011110。
在反码表示中,0也有两种表示形式,具体如下:
当X=+0时,则[X]反=00000000。
当X=-0时,则[X]反=10000000。
(3)补码的表示
一个数X的补码表示方式为:当X为正数时,则X的补码与X的原码相同;当X为负数时,则X的补码,其符号位与原码相同,其数值位取反加1。这里将X的补码表示记为[X]补。
例如,当X=+1110001,则[X]原=01110001,[X]补=01110001。
当X=-1110001,则[X]原=11110001,[X]补=10001111。 Linux/Unix技术丛书·跟老男孩学Linux运维:核心基础篇(上)(第2版)