二进制·十进制·八进制·十六进制

二进制·十进制·八进制·十六进制


学习一遍,总结一遍,回头翻看千万遍!

前言:

计算机运行,数据乃是必不可少的,而数据分为数值型和非数值型两大类;那今天的主角便呼之欲出了,一切数值型数据都要转换成二进制形式方便计算机进行运算。因此要深入了解计算机,进制之间的转换就成了必选项。

一、十进制

在C语言中,没有特殊说明和前导符时,默认的都是10进制数据;

占位符:%d

特点:逢10进1 每一位上的数字范围 [0, 9]

例如:520 1314

十进制转换成二进制:

使用除2取余法:用十进制数除以2,保留商和余数,

然后再用商继续除以2,保留商和余数,依次类推

直到商为 0,将得到的余数 倒序取出 就是对应的二进制数了。

在这里插入图片描述

二、二进制

前导符 0b

输出二进制需要使用库函数itoa或者使用短除法

特点:逢2进1 每一位上的数字 只能是 0 或者 1

例如:0b1110 0b1100

二进制转十进制:

从右到左算

0b1110 == 02^0 + 12^1 + 12^2 + 12^3 == 0 + 2 + 4 + 8 = 14

其他进制转换十进制都可以使用这种方式,只不过将底数的2换成对应进制的数字即可

也可以使用8421的方式转换

1000 --> 8

0100 --> 4

0010 --> 2

0001 --> 1

三、八进制

前导符 0 (是数字零 不是字母o)

占位符:%#0

特点:逢8进1 每一位上的数字范围 [0,7]

例如:0456 0666 0765

八进制转二进制:

方法1:八先转十 然后十转二

方法2:从右向左,1位八进制数表示 3位二进制数

0735 -->0b111011101

二进制转八进制:

从右向左,每3位二进制数表示 1位八进制数,高位不够补0

0b010110101 --> 0265

四、十六进制

前导符 0x

占位符:%#x

特点:逢16进1 每一位上的数字范围 0~9 a10 b11 c12 d13 e14 f15

例如:0x4F5D 0x1234 0xABCD

十六进制转二进制:

方法1:十六先转十 然后十转二

方法2:从右向左,1位十六进制数表示 4位二进制数

0x45EF -->0b 0100 0101 1110 1111

二进制转十六进制:

从右向左,每4位二进制数表示 1位十六进制数,高位不够补0

0b 0010 1011 0101 --> 0x2B5

五、表格速记

进制类型前导符占位符特点进制转换举例
十进制%d逢十进一十进制转二进制:除二取余,逆序排列1、6、14、250
二进制0b无(输出二进制使用itoa函数)逢二进一二进制转十进制:从右到左算:0b1110 == 02^0 + 12^1 + 12^2 + 12^3 == 0 + 2 + 4 + 8 = 140b00011、0b0111001
八进制0%#0(#表示输出前导符)逢八进一八进制转二进制:方法1:八先转十 然后十转二;方法2:从右向左,1位八进制数表示 3位二进制数 0735 -->0b1110111010265、035464
十六进制0x%#x(#表示输出前导符)逢十六进一十六进制转二进制:方法1:十六先转十 然后十转二;方法2:从右向左,1位十六进制数表示 4位二进制数 0x45EF -->0b 0100 0101 1110 11110xE11、0xA4646

六、二进制小数和十进制小数之间的转换

6.1. 二进制小数转换成十进制小数

由二进制数转换成十进制数的基本做 法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。

例如把二进制数 110.11 转换成十进制数。

在这里插入图片描述

6.2.十进制小数转换为二进制小数

十进制小数转换成二进制小数采用"**乘2取整,顺序排列"**法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

在这里插入图片描述

6.3.八进制转换

二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。

八进制数转换成二进制数:把每一个八进制数转换成3位的二进制数,就得到一个二进制数。

例:将八进制的37.416转换成二进制数:

3 7 . 4 1 6

011 111 .100 001 110

即:(37.416)8 =(11111.10000111)2

例:将二进制的10110.0011 转换成八进制:

0 1 0 1 1 0 . 0 0 1 1 0 0

2 6 . 1 4

即:(10110.011)2 = (26.14)8

6.4.十六进制与二进制的转换:

二进制数转换成十六进制数:从小数点开始,整数部分向左、小数部分向右,每4位为一组用一位十六进制数的数字表示,不足4位的要用“0”补足4位,就得到一个十六进制数。

十六进制数转换成二进制数:把每一个十六进制数转换成4位的二进制数,就得到一个二进制数。

例:将十六进制数5DF.9 转换成二进制:

5 D F . 9

0101 1101 1111 .1001

即:(5DF.9)16 =(10111011111.1001)2

例:将二进制数1100001.111 转换成十六进制:

0110 0001 . 1110

6 1 . E

即:(1100001.111)2 =(61.E)16

七、进制转换练习题

1.十进制数 1000 对应二进制数为 ,对应十六进制数为___。 A(2)B (3)

​ 供选择的答案为:

A:(1)1111101010 (2) 1111101000 (3) 1111101100 (4) 1111101110

B:(1)3C8 (2) 3D8 (3) 3E8 (4) 3F8

2.十进制小数为 0.96875 对应的二进制数为________,对应的十六进制数为______。 A (1) B (2)

供选择的答案

A:(1)0.11111(2)0.111101(3)0.111111(4)0.1111111

B:(1)0.FC (2)0.F8 (3)0.F2 (4)0.F1

3.对于不同数制之间关系的描述,正确的描述为_________。 (1)

供选择的答案:

A: (1) 任意的二进制有限小数,必定也是十进制有限小数。

(2)任意的八进制有限小数,必定也是二进制有限小数。

(3)任意的十六进制有限小数,不一定是十进制有限小数。

F1

3.对于不同数制之间关系的描述,正确的描述为_________。 (1)

供选择的答案:

A: (1) 任意的二进制有限小数,必定也是十进制有限小数。

(2)任意的八进制有限小数,必定也是二进制有限小数。

(3)任意的十六进制有限小数,不一定是十进制有限小数。

(4)任意的十进制有限小数,必然也是八进制有限小数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值