一、二进制数、位和字节
1、二进制数
以为基地表示的数字称为二进制数。二进制中的2和十进制中的10作用相同。二进制数1101可表示为:
1*23+1*22+0*21+1*20 以十进制数表示 1*8+1*4+0*2+1*1 = 13 二进制系统可以把任意整数(如果有足够的位)表示为 0和1的组合。数字计算机通过关闭和打开状态的组合来表示信息,分别是0和1。
2、二进制整数
通常1字节包含8位。C语言用字节(byte)表示储存系统字符集所需的大小。所以C字节可能是8位、9位、16位或其他值。描述存储芯片和数据传输率中所用的字节指的是8位字节,计算机界通常用8位组这个术语特制8位字节。可以从左往右给这8位分别编号7-0。在1字节中,编号是7的位称为高阶位,编号是0的位被称为低阶位。 这里128是2的7次幂,依次类推,该字节能表示的最大数字是把所有位都设置1:11111111.这个二进制的值是 128+64+32+16+8+4+2+1=255 最小值是00000000,其值为0。 一字节可储存0-255范围内的数字,总共256个值。或者通过不同的方式解释位组合,程序可以用1字节存储-128-127范围内的整数,总共还是256个值。 通常unsigned char用一字节可表示的范围是0-255,而signed char用一个字节表示的范围是-128-127.
3、有符号整数
如何表示有符号整数取决于硬件,而不是语言。 第一种:种符号量表示法 用1位(如,高阶位)储存符号,只剩下7位表示数字本身(假设储存在一个字节里面)。10000001表示-1,00000001表示1,因此,其表示范围是-127-+127。此方法的缺点是有俩个0:+0和-0。这容易混淆,而且用俩个位组合来表示一个值有些浪费。 第二种:二进制补码 二进制补码用1字节的后7位表示0-127,高阶位设置为0。如果高阶位是1,表示的值为负。 这俩种方法的区别在于如何区别负值。 二进制反码方法通过反转位组合中的每一位成一个负数。例如00000001是1,那么11111110是-1.这种方法也有一个-0:11111111.该方法能表示-127到127的数。
4、二进制浮点数
浮点数分俩部分储存:二进制小数和二进制指数。
二、其他进制数
1、八进制
八进制指八进制计数系统,该系统基于8的幂,用0-7表示数字。例如,八进制数451(在C中写作0451)表示为:4*82+5*81+1*80=297(十进制数)。 每个八进制位对应三个二进制位。下表列出了对应关系。注意:将八进制数转换成二进制形式时,不能去掉中间的0。例如八进制数0173的二进制形式是011111011,不是0111111。
八进制位 | 等价的二进制位 |
---|
0 | 000 | 1 | 001 | 2 | 010 | 3 | 011 | 4 | 100 | 5 | 101 | 6 | 110 | 7 | 111 |
2、十六进制
十六进制指十六进制计数系统,该系统基于18的幂,用0-15表示数字。由于没有单独的数(即0-9这样单独一位的数)表示10-15,所以用字母A-F来表示,C语言中,可以用大写或者小写。例如,十六机制数A3F(在C中写作0xA3F)表示为 10*162+3*161+15*160=2623(十进制) 每一个十六进制位都对应一个4位的二进制数(即4个二进制位),那么俩个十六进制恰好对应一个8位字节。第一个十六进制表示前4位,第二个十六进制位表示后4位。因此,十六进制很适合表示字节值。
十进制 | 十六进制 | 等价二进制 |
---|
0 | 0 | 0000 | 1 | 1 | 0001 | 2 | 2 | 0010 | 3 | 3 | 0011 | 4 | 4 | 0100 | 5 | 5 | 0101 | 6 | 6 | 0110 | 7 | 7 | 0111 | 8 | 8 | 1000 | 9 | 9 | 1001 | A | 10 | 1010 | B | 11 | 1011 | C | 12 | 1100 | D | 13 | 1101 | E | 14 | 1110 | F | 15 | 1111 |
|