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的位被称为低阶位。
在这里插入图片描述
这里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。

八进制位等价的二进制位
0000
1001
2010
3011
4100
5101
6110
7111
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位。因此,十六进制很适合表示字节值。

十进制十六进制等价二进制
000000
110001
220010
330011
440100
550101
660110
770111
881000
991001
A101010
B111011
C121100
D131101
E141110
F151111
  • 25
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值