十进制转二进制 / 八进制 / 十六进制的手算方法,及其数学原理的通俗解释
前言:接触计算机的同学学习基础课程时,不免会碰到十进制转二进制 / 八进制 / 十六进制这种问题。常见的方法有“除以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。
十进制转二进制 / 八进制 / 十六进制的手算方法,及其数学原理的通俗解释相关推荐
- 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...
C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...
- 十进制转二进制/八进制/十六进制
二进制转十进制 求(10000000 00001011 00000011 00011111)B的十进制数 如下图(分子是二进制数,分目是0-7的取值范围): 首先,我们有一个十进制的数字**(21)D ...
- c语言中十进制转化二进制八进制十六进制,进制转换:二进制、八进制、十六进制、十进制之间的转换...
对于基础薄弱的读者,本节的内容可能略显晦涩和枯燥,如果觉得吃力,可以暂时跳过,用到的时候再来阅读.但是本节所讲的内容是学习编程的基础,是程序员的基本功,即使现在不学,迟早也要回来学. 上节我们对二进制 ...
- 十进制转二进制,八进制,十六进制(PHP)
<?php #使用:$var=e(数字,进制); function e($v,$l){ if($v>0&&in_array($l,array(2,8,16))){ $ ...
- 十进制与二进制八进制十六进制的相互转换
using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Conso ...
- C语言 十进制转 二进制 八进制 十六进制
整体源码: #include<stdlib.h> #include<stdio.h> # define STACK_INIT_SIZE 100 # define STACKIN ...
- Java算法学习:java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制)
java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制) 这几天在复习C语言的数据结构栈和队列那一章的时候,看到利用栈的特性FILO实现的进制转换十分简洁 想起了java中实现栈的操作十分 ...
- c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...
利用一个函数实现十进制数转换成二进制,八进制,十六进制.利用的是栈的后进先出的思想.算法简单. #include #include #include #define STACK_INIT_SIZE 1 ...
- java中各进制之间的转换(十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制)...
在java编辑中有没有遇到经常需要进行java中各进制之间的转换(十进制转十六进制.十进制转二进制.二进制转十进制.二进制转十六进制)的事情呢?下面我们就来分析一下各自是怎么转换的: [java] / ...
最新文章
- iframe嵌入页面白屏_Vue使用iframe嵌入第三方网页并修改标题
- tkFileDialog报错,模块未找到出错:没有名字叫做 tkFileDialog 的模块
- git放弃本地修改,强制覆盖本地文件
- MySQL为其他用户创建数据库_MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限...
- gdb调试器命令(zz)
- Andriod 学习笔记 layout布局
- python基础day2作业:购物车
- NOIP2018普及组复赛解析
- php k线图粒度计算,【k线】k线图中MA均线计算
- 手机锁屏密码忘记了怎么办,清除锁屏的办法
- firefox浏览器和IE
- Atitit 常见面试问题回答法 原则与细则 目录 1.1. 1、工作多久了?为什么离职?	1 1.2. 、自我评价	1 1.3. 问你有什么缺点	2 1.4. 4、理想薪资	2 1.5. 职业规
- lvs realserver 配置VIP
- 【巷子】---fetch---基本使用
- ajaxpro安装和使用---有人说ajaxpro是ajax的替代品
- win10宽带连接错误720
- (1分钟突击面试) 高斯牛顿、LM、Dogleg后端优化算法
- 什么是撞库,如何预防撞库攻击?
- windows启动GrADS失败connot connect to XMing server
- 关于如何设置 Linux 的 IP配置
热门文章
- 【Python-2.7】对列表进行排序
- ubuntu安装过程中遇到的一些问题及解决办法。
- Error, some other host already uses address 192.168.0.202错误解决方法
- 解决在IDEA 的Maven下 出现 Cannot access in offline mode 问题
- 表单出现提交两次的问题的解决
- Idea(二) 解决IDEA卡顿问题及相关基本配置
- 解决安装mysql动态库libstdc++.so.6、libc.so.6版本过低问题
- Hive数据倾斜解决方法总结
- python2.7下使用logging模块记录日志到终端显示乱码问题解决
- swift中的let和var有什么区别?