首页 > 其他分享 >进制转换原理分析

进制转换原理分析

时间:2023-08-11 23:33:43浏览次数:36  
标签:十六进制 转换 进制 二进制 二进制位 原理 八进制 十进制


我们最熟悉的进制就是从小就学的十进制,“逢十进一”如:

然而在计算机CPU操作都是二进制数据0或1,这样就需要我们进行进制的的转换,这里的二进制就是,“逢二进一”如:

八进制为,“逢八进一”如:

十六进制为,“逢十六进一”如:

进制转换原理

 

进制转换分:整数部分和小数部分

1,整数间十进制转其他格式:

十进制整数转换为(R)进制整数采用"除R取余,逆序排列"法。具体做法是:用R去除十进制整数,可以得到一个商和余数;再用R去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为R进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来,如10转2:

考虑到一个字节是8个二进制位,所以我们在"最高位"也就是"第7位"上补0,形成如下最终答案:

再看二进制加法的过程,注意:逢二进一!

那么,二进制的10110011表示为十进制,应该是多少呢?计算过程如下:

2,小数部分十进制转其他格式:

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


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

0.625 * 2         1

0.25 * 2            0

0.5 * 2              1

值为0.101

0.3 * 2              0

0.6 * 2              1

0.2 * 2              0

0.4 * 2              0

0.8 * 2              1

0.6 * 2              1 

值为:0.010011(取小数点前6位)

八进制和十六进制

无论是八进制或是十六进制,都不是电脑所能"理解"的。那为什么需要这两种进制呢?原因是,八进制和十六进制能够有效地提高二进制计算的效率。换句话说,八进制或十六进制能够很方便地和二进制进行相互转换。

先来说说八进制:

八进制"逢8进一"。注意到:3个二进制位正好能表达1个八进制位的信息。1个八进制位有共8种状态,对应的3个二进制位是 所以,八进制和二进制的转换方式是十分简单的:3个二进制位转换成对应的1个八进制位。

举例来说,二进制到八进制的转换如下图所示:

其中,每3位二进制数转换为1位八进制数。注意到上图二进制数中,最左侧的0是我们手动补上去的,为的是凑足3个数进行转换。同理,我们有下图:

把2个八进制数相加:

按权展开,验算一下:





这与十进制数计算的答案是相符的。说明我们的八进制运算是正确的。

八进制转为二进制,得到二进制的答案:

由上运算过程可见,八进制的表示法,比二进制的表示法来得方便。

 

再来看看十六进制:

这和八进制的形式很相似。只不过:

十六进制"逢16进一"。1个十六进制位对应的数值表示是:0~9,A,B,C,D,E,F;其中,A,B,C,D,E,F分别对应十进制的10,11,12,13,14,15。我们注意到:4个二进制位正好能表达1个十六进制位的信息。1个十六进制位有共16种状态,对应的4个二进制位是 所以,十六进制和二进制的转换方式是十分简单的:4个二进制位转换成对应的1个十六进制位。

以上题为例,我们再用十六进制做个转换计算的例子:

 

另一个数:

二者相加:

按权展开,得到:

同样地,我们也可以很方便地把上述十六进制的值再转为二进制的表达形式:(1位十六进制扩展为4位二进制)

标签:十六进制,转换,进制,二进制,二进制位,原理,八进制,十进制
From: https://blog.51cto.com/u_2650279/7054068

相关文章

  • 某公司笔试题 - 进制转化(附python代码)
    #写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。#数据范围:保证结果在1<=n<=2**31-1hex_str=input("请输入一个十六进制的数:")whileTrue:try:#将十六进制的数转成10进制s=int(hex_str,16)#数据的取值范围[1,214748364......
  • Cisdem Video Converter for Mac(视频转换工具) 7.10.0中文版
    CisdemVideoConvertermac是一款视频转换软件,它可以将各种常见格式的视频文件转换为其他格式,并提供了多种编辑和调整功能。CisdemVideoConvertermac软件特点-支持批量转换:用户可以同时转换多个视频文件,极大地提高了工作效率。-高质量输出:CisdemVideoConverter支持输出高质......
  • Go数组转换,[]byte、[]unint16互相转换的方法封装,完整范例
    需求:分别封装方法将[]byte转换成[]unint16,将[]unint16转换成[]bytebyte相当于unint8分析:长度为20的[]byte转换为长度为10的[]unint16,他们之间的转换如bytes:=[]byte{0,1}  ===》[0*256+1]=1 注意:第奇数乘256加偶数的值则[]uint16的值为[1]完整代码如下:1pack......
  • JTA 深度历险 - 原理与实现
    http://www.ibm.com/developerworks/cn/java/j-lo-jta/在J2EE应用中,事务是一个不可或缺的组件模型,它保证了用户操作的ACID(即原子、一致、隔离、持久)属性。对于只操作单一数据源的应用,可以通过本地资源接口实现事务管理;对于跨数据源(例如多个数据库,或者数据库与JMS)的大型应用,则......
  • 《转换篇》string和int
    string转int参考链接:https://blog.csdn.net/m0_70283041/article/details/126102424//法一inti=int.Parse("100");inttext=int.Parse("整型");//如果把非字符型(除了string以外都不行)或不是整数的字符转为int,则会产生异常inttext=int.Parse("3.5");//如果把非......
  • Qt 渲染原理
    QStyleQStyle决定了各种控件在不同OS平台(win10,apple,vista,xp)等基本的样式;它的继承类实现了相应的接口使得在不同操作平台上观感,细节大不相同;也就是说,QStyle的派生类能够管理到控件的整个绘制过程Qt包含一组QStyle子类,它们模拟Qt支持的不同平台的样式......
  • hutool包将json串转为泛型类出现转换异常
    hutool包将json串转为泛型类出现转换异常问题描述:在使用hutool包的toBean方法转换json为泛型类之后,去获取泛型类的某个字段出现报错。java.lang.ClassCastException:cn.hutool.json.JSONObjectcannotbecasttoXXXX造成原因:当使用JSONUtil将一串json转为一个泛型类,且指定转换......
  • 异步线程变量传递必知必会---InheritableThreadLocal及底层原理分析
    InheritableThreadLocal简介笑傲菌:多线程热知识(一):ThreadLocal简介及底层原理3赞同·0评论文章上一篇文章我们聊到了ThreadLocal的作用机理,但是在文章的末尾,我提到了一个问题,ThreadLocal无法实现异步线程变量的传递。什么意思呢?以下面的代码为例子:@SneakyThrowspublicBo......
  • Android View绘制原理-RenderPipeline
    在上一篇关于帧绘制的原理中,做好了EGLSuface切换,同步好了UI的更新,为需要进行GPU绘制的RenderNode创好了SKSurface,最后通过ANativeWindow为下一帧调用了dequeueBuffer。所有的资源和数据都准备好了,从而可以进行绘制,这个任务将由RenderPipeline来完成。我们先不考虑Fence的逻辑,直接接......
  • 【Hystrix技术指南】(7)故障切换的运作流程原理分析(含源码)
    推荐超值课程:点击获取背景介绍目前对于一些非核心操作,如增减库存后保存操作日志发送异步消息时(具体业务流程),一旦出现MQ服务异常时,会导致接口响应超时,因此可以考虑对非核心操作引入服务降级、服务隔离。Hystrix说明官方文档Hystrix是Netflix开源的一个容灾框架,解决当外部依......