用Scratch把十进制转为二进制
作者:***
来源:《电脑报》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
        这种因存储空间导致的精度问题是编程上常见的技术问题,吃透了进制转换对您后续的编程学习有重要的意义。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。