前言:接触计算机的同学学习基础课程时,不免会碰到十进制转二进制 / 八进制 / 十六进制这种问题。常见的方法有“除以2/8/16看余数”。本文在介绍方法的前提上,对其数学原理进行了通俗的解释。

二进制与十进制

不考虑汇编语言的特性,对于一个字节:1 0 0 1 1 0 1 0,将其转十进制即为

要注意最低位(最右边的位)代表的是2的0次方,而非1次方。总之,二进制转十进制很简单。这里为后文做铺垫。

十进制转二进制手算方法

以154为例:将154不断除以2,取余数,最后从底部取数,作为二进制的开头。

操作 上一行操作的商值 余数
154除以2 154 0
77除以2 77 1
38除以2 38 0
19除以2 19 1
9除以2 9 1
4除以2 4 0
2除以2 2 0
1除以2 1 1

最后所得二进制值即10011010。

结果是正确的,但是这个方法的道理/数学原理是什么?

数学原理

十进制数154,对应的二进制为10011010,即,我们将这个式子进行与上述方法同样的操作。

操作 上一行操作的商值 余数
154除以2 154 = 2^7 * 1 + 2^4 * 1 + 2^3 * 1 + 2^1 * 1 0
77除以2 77 = 2^6 * 1 + 2^3 * 1 + 2^2 * 1 + 2^0 * 1 1
38除以2 38 = 2^5 * 1 + 2^2 * 1 + 2^1 * 1 0
19除以2 19 = 2^4 * 1 + 2^1 * 1 + 2^0 * 1 1
9除以2 9 = 2^3 * 1 + 2^0 * 1 1
4除以2 4 = 2^2 * 1 0
2除以2 2 = 2^1 * 1 0
1除以2 1 = 2^0 * 1 1

如上表,不断除以2实际上是一种“将二进制高位降档”的过程:

  • 对于最高位的2,比如10011010最左边的1,当然要除以7次2才能把低位的1和0“清理干净”;
  • 实际上,还可把除以2理解为一种“吞掉低位数字”,即第一次除以2将10011010末尾的0吞掉,吐出1001101,以此类推;
  • 不管怎么理解,都与定义规则规则息息相关。

【附】定义规则:对于位的二进制数,其转换为十进制即

拓展:十进制转八进制、十六进制

那现在读者也一定知道八进制转二进制的做法和原理了吧?我来举个例子,比如十进制数109。

操作 上一行操作的商值 余数
109除以8 109 = 8^2 * 1 + 8^1 * 5 + 8^0 * 5 5
13除以8 13 = 8^1 * 1 + 8^0 *5 5
1除以8 1 = 8^0 * 1 1

即109的八进制为155。

转为十六进制例子如下。

操作 上一行操作的商值 余数
109除以16 109 = 16^1 * 1 + 16^0 * 13 D(13)
6除以16 6 = 16^0 * 6 6

即109的十六进制为6D。

十进制转二进制 / 八进制 / 十六进制的手算方法,及其数学原理的通俗解释相关推荐

  1. 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...

    C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...

  2. 十进制转二进制/八进制/十六进制

    二进制转十进制 求(10000000 00001011 00000011 00011111)B的十进制数 如下图(分子是二进制数,分目是0-7的取值范围): 首先,我们有一个十进制的数字**(21)D ...

  3. c语言中十进制转化二进制八进制十六进制,进制转换:二进制、八进制、十六进制、十进制之间的转换...

    对于基础薄弱的读者,本节的内容可能略显晦涩和枯燥,如果觉得吃力,可以暂时跳过,用到的时候再来阅读.但是本节所讲的内容是学习编程的基础,是程序员的基本功,即使现在不学,迟早也要回来学. 上节我们对二进制 ...

  4. 十进制转二进制,八进制,十六进制(PHP)

    <?php #使用:$var=e(数字,进制); function e($v,$l){ if($v>0&&in_array($l,array(2,8,16))){    $ ...

  5. 十进制与二进制八进制十六进制的相互转换

    using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Conso ...

  6. C语言 十进制转 二进制 八进制 十六进制

    整体源码: #include<stdlib.h> #include<stdio.h> # define STACK_INIT_SIZE 100 # define STACKIN ...

  7. Java算法学习:java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制)

    java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制) 这几天在复习C语言的数据结构栈和队列那一章的时候,看到利用栈的特性FILO实现的进制转换十分简洁 想起了java中实现栈的操作十分 ...

  8. c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...

    利用一个函数实现十进制数转换成二进制,八进制,十六进制.利用的是栈的后进先出的思想.算法简单. #include #include #include #define STACK_INIT_SIZE 1 ...

  9. java中各进制之间的转换(十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制)...

    在java编辑中有没有遇到经常需要进行java中各进制之间的转换(十进制转十六进制.十进制转二进制.二进制转十进制.二进制转十六进制)的事情呢?下面我们就来分析一下各自是怎么转换的: [java] / ...

最新文章

  1. iframe嵌入页面白屏_Vue使用iframe嵌入第三方网页并修改标题
  2. tkFileDialog报错,模块未找到出错:没有名字叫做 tkFileDialog 的模块
  3. git放弃本地修改,强制覆盖本地文件
  4. MySQL为其他用户创建数据库_MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限...
  5. gdb调试器命令(zz)
  6. Andriod 学习笔记 layout布局
  7. python基础day2作业:购物车
  8. NOIP2018普及组复赛解析
  9. php k线图粒度计算,【k线】k线图中MA均线计算
  10. 手机锁屏密码忘记了怎么办,清除锁屏的办法
  11. firefox浏览器和IE
  12. Atitit 常见面试问题回答法 原则与细则 目录 1.1. 1、工作多久了?为什么离职? 1 1.2. 、自我评价 1 1.3. 问你有什么缺点 2 1.4. 4、理想薪资 2 1.5. 职业规
  13. lvs realserver 配置VIP
  14. 【巷子】---fetch---基本使用
  15. ajaxpro安装和使用---有人说ajaxpro是ajax的替代品
  16. win10宽带连接错误720
  17. (1分钟突击面试) 高斯牛顿、LM、Dogleg后端优化算法
  18. 什么是撞库,如何预防撞库攻击?
  19. windows启动GrADS失败connot connect to XMing server
  20. 关于如何设置 Linux 的 IP配置

热门文章

  1. 【Python-2.7】对列表进行排序
  2. ubuntu安装过程中遇到的一些问题及解决办法。
  3. Error, some other host already uses address 192.168.0.202错误解决方法
  4. 解决在IDEA 的Maven下 出现 Cannot access in offline mode 问题
  5. 表单出现提交两次的问题的解决
  6. Idea(二) 解决IDEA卡顿问题及相关基本配置
  7. 解决安装mysql动态库libstdc++.so.6、libc.so.6版本过低问题
  8. Hive数据倾斜解决方法总结
  9. python2.7下使用logging模块记录日志到终端显示乱码问题解决
  10. swift中的let和var有什么区别?