C Primer Plus学习 五十一 二进制

        •个字节通常包括8个位。请记住,因为C使用术语字节(byte)表示用于存放系统字符集的空间大 小,所以一个C字节可能为8位、9位、16位或其 他值。然而,描述存储器芯片和数据传输率时使用的字节指8位字节。为了使问题简单,本章假定1个字节为8位。您将以将这8位从左到右看作是从7到0在字节中,位7称为高位(high-order bit),位0称为低位(low-orderbit)。每位数字是对应2 的个特定的指数。可将字节设想成如图15.1所示的形式。


       这里,128是2的7次幂,依此类推。该字节可以保存的最大数是把所有的位都设置为1: 11111111 该二进制数的值如下:

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

        最小的二进制数是00000000,或一个简单的0。一个字节可以存储的数的范围是0到255,总共256 个可能的值。通过改变对位模式的解释方式,一•个字节可以存储从-128到+127之间的整数,总共还是256 个值。例如,unsigned char通常使用一个字节来表示0到255,而signed char通常使用一个字节来表示-128 到+127。

有符号整数

       有符号数的表示方法是由硬件决定,而不是由C决定的。或许表示有符号数最简单的方法就是保留1 位(比如髙位)来表示数的符号。在-个1字节值中,该方法为数字本身留下7位。使用这样的符号景 (sign-magnitude)表示法,10000001 表示-1, 00000001 表示 1。那么整个范围是-127 到+127。

        这种方法的一个缺点是有两个零:+0和-0。这会引起混淆,而且用两个位组合来表示一个值也有些浪费。
        二进制补码(two’s-complement)方法避免了这种问题,是当今使用最普遍的系统。我们将讨论这种方 法应用于1字节值时的情况。在这种情形下,使用最后7位表示从0到127的值,同时高位设置为0。这部 分与符号量方法相同。同样地,如果高位是丨,那么该值为负。两种方法的区别在于确定该负数值的方法。 从个9位组合100000000 ( 256的二进制形式)中减去-个负数的位组合,结果是该负数值的数量。例如, 假设-个负数的位组合为10000000。作为个无符号字节,该组合为128。作为一个有符号的值,该组合为 负(位7是1),并且值为100000000-10000000, ji0000000 (128h因此,该数为-128 (在符号量表示 法中该数为-0)。与之类似,10000001是-127, 11111111是-1。该方法表示数的范围是-丨28 Slj+127。
       要对一个二进制补码数取相反数,最简单的方法是反转每一-位(将〇变为1,将1变为〇),然后加1。 因为丨是oooooooi,所以-丨是mill丨o+i,即liiiim,和前面所看到的是一致的。
        二进制反码(one’s-complement)方法通过反转位组合中的每一位以形成一个数的负数。例如,00000001 是1, 11111110是-1。这种方法也有一个-0: 11111111。其范围(对于1字节值)是-127到+127。

二进制浮点数

        浮点数分两部分存储:一个二进制小数和一个二进制指数。让我们了解其实现的方法。 •
一、二进制小数

普通的小数0.527代表:

5/10 + 2/100 + 7/1000

其中的分母是10的依次递增的幂。在二进制小数中,使用2的幂作为分母,因此二进制小数.101代表:

1/2 + 0/4 + 1/8

用十进制计数法可表示为:

0.50 + 0.00 + 0.125

也即0.625。

        像1/3这样的许多小数不能用十进制计数法精确地表示。同样,许多小数也不能用一•进制计数法精确 地表示。实际上,二进制计数法只能精确地表示多个丨/2的幂的和。因此3/4和7/8可以精确地表示为二进 制小数,怛是1/3和2/5却不能。

二、浮点数表示法
       要在计算机中表示个浮点数,需要留出若T+个位(其位数取决于系统)存放 '个:进制小数,K他 位存放…个指数。总之,数字的实际值是1进制小数部分乘以2的指定次幂。比如用4乘以•个浮点数, 则指数增加了 2,二进制小数不改变。用个不是2的幂的数乘以一个浮点数,则会改变二进制小数,如 果有必要也会改变指数部分。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值