您的位置:首页 > 其它

第15章 位操作 15.1 二进制数、位和字节

2017-06-06 00:00 267 查看
以2 为基数表示的数字称为二进制数(binary number)。数字2对于二进制数的作用和数字10对于十进制数的作用是相同的。例如,二进制数1101可表示为以下形式:

1X2 3 +1X2 2 +0X2 1 +1X2 0

以十进制数形式表示为

1X8+1X4+0X2+1X1=13

可以使用二进制数将任何整数(如果有足够的位)表示为0和1的一个组合。

15.1.1 二进制整数

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

位号:7 6 5 4 3 2 1 0

0 1 0 0 1 0 0 1

位值:128 64 32 16 8 4 2 1

本例中位6、3和0设置为1,该字节的值为64+8+1,即73.

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

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

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

15.1.2 有符号整数

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

这种方法的一个缺点是有两个零:+0和-0。这会引起混淆,而且用两个位组合来表示一个值也有些浪费。

二进制补码(two's-complement)方法避免了这种问题,是当今使用最普通的系统。我们将讨论这种方法应用于一个字节时的情况。在这种情况下,使用最后7位表示从0到127的值,同时高位设置为0。这部分与符号量方法相同。同样的,如果高位是1,那么该值为负。两种方法的主要区别是在于确定该负数值的方法。从一个9位组合100000000(256的二进制形式)中减去一个负数的位组合,结果是该负数值的数量。例如,假设一个负数的位组合是10000000。作为一个无符号字节,该组合为128。作为一个有符号的值,该组合为负(位7是1),并且值为100000000-10000000,即10000000(128)。因此,该数为-128(在符号量表示法中该数为-0)。与之类似,10000001是-127,11111111是-1。该方法表示数的范围是-128到+127。

要对一个二进制补码数取相反数,最简单的方法是反转每一位,然后加1。因为1是00000001,所以-1是11111110+1,即11111111,和前面所看到的是一致的。

二进制反码(one's-complement)方法通过反转位组合中的每一位以形成一个数的负数。例如,00000001表示1,11111110是-1。这种方法也有一个-0:11111111。其范围是(对于1字节值)-127到+127。

15.1.3 二进制浮点数

浮点数分两部分存储:一个二进制小数和一个二进制指数。

一、二进制小数

普通的小数0.527代表:

5/10+2/100+7/1000

其中的分母是10的依次递增的幂。

在二进制小数中,使用2的幂作为分母,因此二进制小数.101代表:

1/2+0/4+1/8

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

0.5+0.0+0.125

也即0.625.

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

二、浮点数表示法

要在一个计算机中表示一个浮点数,需要留出若干个位(位数取决于系统)存放一个二进制小数,其他位存放一个指数。总之,数字的实际值是二进制小数部分乘以2的指定次幂。比如用4乘以一个浮点数,则指数增加了2,二进制小数不改变。用一个不是2的幂的数乘以一个浮点数,则会改变二进制小数,如果有必要也会改变指数部分。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息