C语言二进制数、位、字节、八进制十六进制

一、二进制数、位和字节

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的位被称为低阶位。
C语言二进制数、位、字节、八进制十六进制_第1张图片
这里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的二进制形式是01111011,不是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

你可能感兴趣的:(c语言,c语言)