进制转换

 

                        进制转换

 

我们以(25.625)(十进制)为例讲解一下进制之间的转化问题
说明:小数部份的转化计算机二级是不考的,有兴趣的人可以看一看

 

1. 十进制 -----> 二进制

  十进制转二进制:
 
 用2辗转相除至结果为1
 将余数和最后的1从下向上倒序写 就是结果

 例如302

 302/2 = 151 余0
 151/2 = 75 余1
 75/2 = 37 余1
 37/2 = 18 余1
 18/2 = 9 余0
 9/2 = 4 余1
 4/2 = 2 余0
 2/2 = 1 余0
 故二进制为100101110

又如:(25.625)(十进制)

 整数部分:
 25/2=12......1
 12/2=6 ......0
 6/2=3 ......0
 3/2=1 ......1
 1/2=0 ......1
 然后我们将余数按从下往上的顺序书写就是:11001,那么这个11001就是十进制25的二进制形式

 小数部分:
 0.625*2=1.25
 0.25 *2=0.5
 0.5 *2=1.0
 然后我们将整数部分按从上往下的顺序书写就是:101,那么这个101就是十进制0.625的二进制形式

 所以:(25.625)(十进制)=(11001.101)(二进制)


2. 二进制 ----> 十进制

   二进制转十进制

 从最后一位开始算,依次列为第0、1、2...位
 第n位的数(0或1)乘以2的n次方
 得到的结果相加就是答案

 例如:01101011.转十进制:

 第0位:1乘2的0次方=1
 1乘2的1次方=2
 0乘2的2次方=0
 1乘2的3次方=8
 0乘2的4次方=0
 1乘2的5次方=32
 1乘2的6次方=64
 0乘2的7次方=0
 然后:1+2+0
 +8+0+32+64+0=107.
 二进制01101011=十进制107.

(11001.101)(二进制)

 整数部分: 下面的出现的2(x)表示的是2的x次方的意思
 1*2(4)+1*2(3)+0*2(2)+0*2(1)+1*2(0)=25
 小数部分:
 1*2(-1)+0*2(-2)+1*2(-3)=0.625
 所以:(11001.101)(二进制)=(25.625)(十进制)


3. 十进制 ----> 八进制

(25.625)(十进制)
整数部分:
25/8=3......1
3/8 =0......3
然后我们将余数按从下往上的顺序书写就是:31,那么这个31就是十进制25的八进制形式

小数部分:
0.625*8=5
然后我们将整数部分按从上往下的顺序书写就是:5,那么这个5就是十进制0.625的八进制形式

所以:(25.625)(十进制)=(31.5)(八进制)


4. 八进制 ----> 十进制

八进制就是逢8进1。

八进制数采用 0~7这八数来表达一个数。

八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

所以,设有一个八进制数:1507,转换为十进制为:

用竖式表示:

1507换算成十进制。

第0位 7 * 80 = 7

第1位 0 * 81 = 0

第2位 5 * 82 = 320

第3位 1 * 83 = 512   +

--------------------------

              839

同样,我们也可以用横式直接计算:

7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839 

结果是,八进制数 1507 转换成十进制数为 839


又如:(31.5)(八进制)

整数部分:
3*8(1)+1*8(0)=25
小数部分:
5*8(-1)=0.625
所以(31.5)(八进制)=(25.625)(十进制)


5. 十进制 ----> 十六进制
(25.625)(十进制)
整数部分:
25/16=1......9
1/16 =0......1
然后我们将余数按从下往上的顺序书写就是:19,那么这个19就是十进制25的十六进制形式
小数部分:
0.625*16=10(即十六进制的A或a)
然后我们将整数部分按从上往下的顺序书写就是:A,那么这个A就是十进制0.625的十六进制形式
所以:(25.625)(十进制)=(19.A)(十六)


6. 十六进制----> 十进制
(19.A)(十六)
整数部分:
1*16(1)+9*16(0)=25
小数部分:
10*16(-1)=0.625
所以(19.A)(十六)=(25.625)(十进制)

 


如何将带小数的二进制与八进制、十六进制数之间的转化问题

我们以(11001.101)(二进制)为例讲解一下进制之间的转化问题
说明:小数部份的转化计算机二级是不考的,有兴趣的人可以看一看

 

1. 二进制 ----> 八进制
(11001.101)(二进制)
整数部分: 从后往前每三位一组,缺位处用0填补,然后按十进制方法进行转化, 则有:
001=1
011=3
然后我们将结果按从下往上的顺序书写就是:31,那么这个31就是二进制11001的八进制形式

小数部分: 从前往后每三位一组,缺位处用0填补,然后按十进制方法进行转化, 则有:
101=5
然后我们将结果部分按从上往下的顺序书写就是:5,那么这个5就是二进制0.101的八进制形式
所以:(11001.101)(二进制)=(31.5)(八进制)


2. 八进制 ----> 二进制
(31.5)(八进制)
整数部分:从后往前每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 则有:
1---->1---->001
3---->11
然后我们将结果按从下往上的顺序书写就是:11001,那么这个11001就是八进制31的二进制形式
说明,关于十进制的转化方式我这里就不再说了,上一篇文章我已经讲解了!

小数部分:从前往后每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 则有:
5---->101
然后我们将结果按从下往上的顺序书写就是:101,那么这个101就是八进制5的二进制形式
所以:(31.5)(八进制)=(11001.101)(二进制)


3. 十六进制 ----> 二进制
(19.A)(十六进制)
整数部分:从后往前每位按十进制转换成四位二进制数,缺位处用0补充 则有:
9---->1001
1---->0001(相当于1)
则结果为00011001或者11001
小数部分:从前往后每位按十进制转换成四位二进制数,缺位处用0补充 则有:
A(即10)---->1010
所以:(19.A)(十六进制)=(11001.1010)(二进制)=(11001.101)(二进制)


4. 二进制 ----> 十六进制
(11001.101)(二进制)
整数部分:从后往前每四位按十进制转化方式转化为一位数,缺位处用0补充 则有:
1001---->9
0001---->1
则结果为19
小数部分:从前往后每四位按十进制转化方式转化为一位数,缺位处用0补充 则有:
1010---->10---->A
则结果为A
所以:(11001.101)(二进制)=(19.A)(十六进制)


最近有些朋友提了这样的问题“0.8的十六进制是多少?”
我想在我的空间里已经有了详细的讲解,为什么他还要问这样的问题那
于是我就动手算了一下,发现0.8、0.6、0.2... ...一些数字在进制之间的转化
过程中确实存在麻烦。

就比如“0.8的十六进制”吧!
无论你怎么乘以16,它的余数总也乘不尽,总是余8
这可怎么办啊,我也没辙了
第二天,我请教了我的老师才知道,原来这么简单啊!


具体方法如下:
0.8*16=12.8
0.8*16=12.8
.
.
.
.
.
取每一个结果的整数部分为12既十六进制的C
如果题中要求精确到小数点后3位那结果就是0.CCC
如果题中要求精确到小数点后4位那结果就是0.CCCC


现在OK了,我想我的朋友再也不会因为进制的问题烦愁了!

 

 

 

 -------------------------------------------------------------------------------------------------------------------------------

 

                
  怎样在C语言中规定输入8进制,输出10进制:

 

  你可以这样写:

 #include"stdio.h"
 main()
 {int i;
 scanf("%o",&i);
 printf("%d",i);
 }
 这样就可以了,其实你说的不过是数据输出中的转换字符的应用就是了。
 其中:
 d 将参数以十进制的形式输出
 o 将参数以无正负号八进制的形式输出
 x 将参数以无正负号的十六进制的形式输出
 u 将参数以无正负号的十进制的形式输出

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值