目录
目录
问题一:在二进制转换八进制的时候,二进制的一组会不会在八进制中找不到对应的数据?
四种进制的组成
二进制:Binary,简写为B,由0和1组成。
八进制:Octal,简写为O,由0-7八个数字组成,C语言规定,在八进制数字前加0与其他进制进行区分。
十进制:Decimal,简写为D,由0-9十个数字组成,开头不需要加任何东西。
十六进制:Hexadecimal,简写为H,由0-9和A-F组成,开头加0x或0X以进行区分。
一、十进制转换其他进制
预备知识:进制转换时,小数字除大数字时,商为0,余数为小数字本身
整数
1.十进制换二进制
(1)除二取余,逆序输出
(2)具体方法
将十进制数除2,得到的整数部分用来做下一次的被除数,余数保留,重复以上操作直到整数部分为0结束,将余数逆序输出,如下图:
2.十进制换八进制
(1)除八取余,逆序输出
(2)具体方法
具体步骤与二进制相同。
以下是将706D转换为八进制的解析:
706除8得88余2,再将88作为第二次的被除数,除8得11余0,11作为下一次的被除数。除八得1余3,最后1除8得0余1。将所有余数逆序输出,即为1302。
3.十进制转换十六进制
(1)除十六取余,逆序输出
(2) 具体方法
方法同上,应当注意的是,当余数为10、11、12、13、14、15时用A、B、C、D、E、F表示。
总结:可以看出十进制向其他进制转换得方法都是一样的, 都是除进制数取余,逆序输出。
小数
小数部分十进制转换其他进制方法都是一样的,不做过多解释。以下时十进制转换二进制、八进制和十六进制得例子及其方法。
1.十进制转换二进制
乘二取整,顺序输出
2.十进制转换八进制
乘八取整,顺序输出
3.十进制转换十六进制
乘十六取整,顺序输出
二、其他进制转换十进制
1.位权
在进行转换之前,先了解一下什么是位权。
介绍:位权是一个数学名词,表示在一进制中每一固定位置对应的单位值。数码所表示的数值等于该数码本身乘以一个与它所在数位有关的常数,这个常数称为“位权”,简称“权”
什么意思呢?我们分开来理解这句话。
第一句:十进制中第二位(十位)的位权是10^1,第三位(百位)上的位权是10^2,整数部分第 i 位的位权为10^(i-1),而小数部分第 j 位的位权为10^-j。
第二句:举个例子,十进制中我们可以用1×(10^2) + 2×(10^1) + 3×(10^0) + 4×(10^-1) + 5×(10^-2)来表示"123.45"。"123.45"中的“1”他表示的数值是100,即1(数码)×10^2(位权)。
推广到其他进制:对于n进制数,整数部分第 i位的位权为N^(i-1),而小数部分第j位的位权为n^-j。(这里是用十进制表示的,看不懂后面有解释)
2.位权展开转换
所以如何把其他进制转换到十进制呢?
我们可以把数字按位权展开,来进行转换
位权展开法:每一位的数符×该位的权值,将所有的乘式相加即可。
进制转换表
3.为什么通过位权展开之后,得到的结果就是十进制?
其实位权展开之后的结果并不一定是十进制,它可以是任意的进制,只不过我们在展开的过程中运用了十进制的运算规则计算的运算,所以结果是十进制的数据。 如下图,在位权展开过程中,把数字的格式改为八进制(把十进制中的8改为八进制中的十),算出的结果就是八进制。在上文的推广中的公式用的是十进制。而用1×(10^2) + 2×(10^1) + 3×(10^0) + 4×(10^-1) + 5×(10^-2)来表示"123.45"的本质是将123进行位权展开,结果保留为十进制,说白了就是十进制换成十进制。
三、二进制、八进制和十六进制之间的转换
利用位权展开,可以在任意两个进制之间进行相互转换。但是这种方法显然是很复杂的,特别是对于一些较大的数,很容易出现计算错误,那么有没有一种简单的方法实现转换呢?
1.方法
首先,我们先思考一下,在十进制中 1 是如何变成 10 的?显然我们只需要乘以10的一次方,就可以让以前的数据向左移动一位。同理在二进制当中,如果想让数据向左移动三位,由 1 变为 1000 ,则需要在 1 的基础上乘以 2^3,在八进制中想要数据向左移动1位,由 1 变为10,则需要在 1 的基础上乘以8^1。不难发现,二进制向左移动3位和八进制想做移动3位,需要乘以相同大小的数(8),也就是说二进制中的每三个数对应着八进制中的一个数字,所以我们只要将二进制数每三个数字分为一组,对应写出八进制的数字,就可以实现数据之间的转换。根据以上分析,因为2^4=16^1,那么我们可以推断出,二进制和十六进制也可以使用以上的方法进行转换,只不过要把二进制每四个分为一组,然后对应出十六进制的数。
而由八进制和十六进制换到二进制的过程则是反过来,把每一个八进制(十六进制)数字,写出对应的二进制即可。
八进制和十六进制之间的转换一般是通过二进制或者十进制为枢纽进行转换的,先把八进制换成二进制/十进制,再换到十六进制。
2.问题
问题一:在二进制转换八进制的时候,二进制的一组会不会在八进制中找不到对应的数据?
每三个二进制数必然会对应一个八进制数,因为在二进制中最大的三位数是 111 B,对应着八进制中最大的一位数 7 O,111B再加1就会变成 1,000B ,那么此时对应的八进制也会进位变成10O。同理,二进制与十六进制的转换也一样。