用Scratch把十进制转为二进制

2020-06-30 14:32陈新龙
电脑报 2020年18期
关键词:二进制整数小数

陈新龙

600,3/5,-7.99……这些数字都是十进制数,因为人有十根手指头,所以最常用的是十进制。十进制就是满十进一,满二十进二,以此类推……十进制数字按权展开,第一位权为10^0,第二位权为10^1……以此类推,第N位按权展开10^(N-1),该数的数值等于每位的数值乘该位对应的权值之和。

在计算机的世界里除了十进制之外,常用的还有二进制、八进制、十六进制,今天我们就来讲一讲这个二进制。

二进制(binary)在数学和数字电路中指以2为基数的记数系统。这一系统中,通常用符号0和1来表示。数字电子电路中的高电位和低电位刚好符合二进制,因此现代的计算机和依赖计算机的设备中都用到二进制。每个数字称为一个比特(BIT,Binary digit)。

那么日常使用的十进制数是怎样转换成计算机使用的二进制数呢?

我们先看一下0-10的二进制转化十进制的对照表

例如:十进制10=二进制1010

按权展开:

1*2^3+0*2^2+1*2^1+0*2^0=10

例如:十进制9=二进制1001

按权展开:

1*2^3+0*2^2+0*2^1+1*2^0=9

初步知道了十進制和二进制的关系后,我们思考一下如何将十进制转化为二进制呢?大家可以去网上查阅一下。

十进制整数转换为二进制整数:十进制整数转换为二进制整数采用“除2取余,逆序排列”法。用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此重复,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。这就是除二取余法。(图1)

下面我们来分析将十进制正整数转化为二进制的代码。问题的核心是将“除2取余,逆序排列”转化成可以执行的代码(图2)。

设置了四个变量,“十进制”、“二进制”、“商”、“余数”。

特别要注意二进制赋值中为空,否则最后的结果会多一位小尾巴0。

将输入的十进制数设为“商”。对它除以2取余数,将这位“余数”存入“二进制”的个位,将“商”除以2向下取整存为下一次循环的“商”。这就是将“除2取余,逆序排列”的计算步骤转化为编程的循环语句,一直处理到“商”=0为止。算出每次商除2的余数,将余数和二进制的数合并。这样结果就可以出来了。

十进制小数转换成二进制小数方法与整数不同,要用“乘2取整,顺序排列”法。用2乘十进制小数,可以得到积,将积的整数部分取出,作为二进制小数的高位,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。把取出的整数部分按顺序排列起来,先取的整数为二进制小数的高位有效位,后取的整数作为低位有效位。

在计算机中将十进制小数转换为二进制小数时,常常会出现无限循环的情况。由于计算机的内存空间有限,只能保留有限的小数位。这时把二进制换回十进制就会出现误差。

比如0.3转换为二进制是0.010011001(1001循环),0.3转为二进制再转回十进制就变小了。

0.3≈0.010011001≈0.298828125

这种因存储空间导致的精度问题是编程上常见的技术问题,吃透了进制转换对您后续的编程学习有重要的意义。

猜你喜欢
二进制整数小数
神奇的二进制
有用的二进制
有趣的进度
这是流行病
失踪的小数
一起解答含小数的方程
答案
小数精灵成长记
数轴上的小数
求整数解的策略