日常生活中用得最多的是十进制,还有生活时间的 六十进制 等等。
机器语言是需要机器指令,机器指令是一串0和1组成的二进制编码,可以想象比喻为计算机的语言。如果对计算机发出一个命令,则该命令就要经过数字化编码后才能传送、存储和处理。
回归到本问题:进制转换
十进制 转换 二进制
一般采取除以2,取余数,最后从下往上排列。
十进制用 0,1,2,3,4,5,6,7,8,9 这些数字来表示;它并没有10
这个数字来表示。
同理,
二进制用 0,1这两个数字表示;它并不会有 2 这个数字来表示。
如果你的assignment,quiz,final 表示二进制的题目,你的答案有2这个数字,不用想肯定错了。
举个例子:将 26 转换为 二进制。

需要注意:
余数是从下往上写
余数是从下往上写
余数是从下往上写
重要事情说说三遍!!!
很多时候,辛辛苦苦计算出来,却高兴太早,顺序写错,白费力气!
好了! 如果这里搞清楚,我们如果遇到一个比较大的数 比如 317, 那要除下来估计得好久~而且容易出错,有没有简便的方式可以做?
其实有,
如果你记得住 2^n 次方,那计算起来就很简便了。

其实我们只要记住两三个比如 2^6=64 2^8=256,就足够了,前后的数我们就可以稍稍自行计算。
回到上面的例子,317,将其改写一下如下

为了演示清楚 我将一步步写出来,数学好的同学可以直接来到最后的等式。
最终我们会得到这样的等式
317 = 256 + 32 + 16 + 8 + 4 + 1
= 2^8 + 2^5 + 2^4 + 2^3 + 2^2 + 2^0

这个时候我们就可以根据2的幂来得到结果。我们留意一下该例子2的幂分别是 8,5,4,3,2,0。
制作一个对照表给大家看看。

仔细的同学会发现,等式中的幂的数字刚刚好是和二进制对应位置匹配,如果对应位置有值,则对对应的位置输入 1,否则输入 0,最后结果就是绿色那一行。
如果熟悉了,以后得到类似的结果
= 2^8 + 2^5 + 2^4 + 2^3 + 2^2 + 2^0
我们就可以直接写出结果来了。
注意:得到2的幂,建议从右往左填,不要搞错位置。可能有些同学并不觉得这个方式简单,见仁见智,使用自己最合适的方式能够正确计算结果就好。
二进制转八进制
继续拿上面的 317作为例子。
如果我们拿到了317的二进制,那么我们怎样转换为八进制?
首先我们得知道八进制用 0,1,2,3,4,5,6,7 来表示。
在八进制中, 7 是最大的那个数字,对应的二进制表示为 1 1 1 (需要 3 bits 才能表示 7 这个值)。
由此,我们可以将二进制以每三位(3 bits)作为一部分,从右往左来划分。如下图:

划分完毕之后,分别对每一部分计算:

所以最后得出317的八进制就是 (0475)。
二进制转十六进制
有了上面的基础,接下来就是照瓢画葫芦了。
十六进制用 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 来表示 0 到 15的值。
在十六进制中, F 是最大的那个数字(即 15),对应的二进制表示为 1 1 1 1 (需要 4 bits 才能表示 F 这个值)。

所以最后得出317的十六进制就是 (13D)。
二进制减法
这个同学们可能问的比较多,并不是不会,只是一下子从十进制转换到二进制有点不适应而已。看完本例子,希望可以更容易去理解。
首先我们先复习一下普通的 十进制数, 100 - 1 是如何借位算数的。

分析:
- 个位 是0, 0 不够减 1, 向 十位 位借;
- 十位 也是 0,没有可以给,那 十位 又得向前一位借;
- 百位 有一个1,它借给 十位, 自己就变成了0;
- 十位 成功从前一位借到,所以借1当10用;
- 十位 从自己10 借 1 给个位,那 十位 就剩下 9;
-
个位 从前一位成功借到,所以借1当10用,10 - 1 = 9;
最后十进制结果就是 99。
那我们再进行 "二进制的减法"运算
二进制数 "100" 减去 二进制数 "001"。

分析:
- 第一位是 0, 0 不够减 1,向第二位借;
- 第二位是 0, 0 没法借,第二位向第三位借;
- 第三位是 1, 它借给第二位,自己就变成 0;
- 第二位成功借到 1, 借 1 当 2 用(不要问我为什么当2用,因为二进制嘛);
- 第二位将自己的 2 借 1 给第一位,自己剩下 1;
- 第一位成功借到 1,借 1 当 2 用,2 - 1 = 1;
最后计算结果是 二进制结果是(011)。
这里我们验算一下
二进制 100 对应 十进制是 4
二进制 001 对应 十进制是 1
二进制 011 对应 十进制是 3
所以计算是正确的。
这里举这个简单例子,是希望大家明白这个道理,跨过这个坎。
十进制负数 转二进制
请记住 规则 :
- 先转成绝对值
- 将绝对值转换二进制
- 将二进制取反
- 加 1
例子 十进制数 - 315 转换 二进制。
- 首先是取绝对值,也就是得到 315
- 315 转换二进制,按照上面的方法 可以得到: 0001 0011 1011
- 取反得到 1110 1100 0100
- 加1,得到 1110 1100 0101
最后二进制结果是 1110 1100 0101
网友评论