主页 > 前端 > javascript >
来源:未知 时间:2022-11-14 16:15 作者:小飞侠 阅读:次
[导读] 现实生活中,我们主要使用十进制。但在计算科学中,二进制非常重要,因为计算机里的所 有内容都是用二进制数字表示的(0和1)。没有十进制和二进制相互转化的能力,与计算机交...
现实生活中,我们主要使用十进制。但在计算科学中,二进制非常重要,因为计算机里的所 有内容都是用二进制数字表示的(0和1)。没有十进制和二进制相互转化的能力,与计算机交流 就很困难。 要把十进制转化成二进制,我们可以将该十进制数除以2(二进制是满二进一)并对商取整, 直到结果是0为止。举个例子,把十进制的数 10转化成二进制的数字,过程大概是如下这样。 大学的计算机课一般都会先教这个进制转换。下面是对应的算法描述。 function decimalToBinary(decNumber)( const remStack = new Stack(); // 这里可以理解自己封装一个栈的 push,pop等 let number = decNumber; let rem; let binaryString while (number > 0) { // {1} rem = Math. floor (number % 2): // (2} remStack.push (rem); // {3} number = Math. floor (number / 2): // {4} } while (!remStack.isEmpty()) { // {15} binaryString += remStack.pop() .toString(); } return binaryString; } 在这段代码里,当除法的结果不为 口时(行(1子),我们会获得一个余数,并放到栈里(行 {2}、行{3})。然后让结果继续除以2(行{4了)。另外请注意:JavaScript 有数值类型,但是它 不会区分整数和浮点数。因此,要使用 Math.f1oor 两数仅返回除法运算结果的整数部分。最 后,用pop 方法把栈中的元素都移除,把出栈的元素连接成宇符串(行151)。 用刚才写的算法做一此测试,使用以下代码把结果输出到控制台里。 console. log (decimalToBinary (233) ); // 11101001 console. log (decimalToBinary (10) ) ; // 1010 console. log (decimalToBinary (1000) ); // 1111101000 迸制转换算法 我们可以修改之前的算法,使之能把十进制转换成基数为 2~36的任意进制。除了把十进制 数除以2转成二进制数,还可以传人其他任意进制的基数为参数,就像下面的算法这样。 function baseConverter (decNumber, base) { const remStack = new Stack () ; const digits = '0123456789ABCDEFGHIJKLMNOPORSTUVWXYZ' ; // {6} let number = decNumber; let rem; let baseString if (! (base >= 2 && base <= 36)) { return ''; } while (number > 0){ rem = Math. floor (number % base); remStack.push(rem); number = Math. floor (number / base); while (!remStack. isEmpty () ){ baseString += digits[remStack.pop()]: // (7} return baseString; } 我们只需要改变一个地方。在将十进制转成二进制时,余数是0或1;在将十进制转成八进 制时,余数是0~7;但是将十进制转成十六进制时,余数是0~9加上A、B、C、D、E和F(对 应10、11、12、13、14和15)。因此,我们需要对栈中的数字做个转化才可以(行{63和行(7了)。 因此,从十一进制开始,字丹表中的每个字丹将表示相应的基数。字母 A代表基数 11,B代表 基数 12,以此类推。 可以使用之前的算法,输出结果如下。 console. log (baseConverter(100345,2)); // 11000011111111001 console. log (baseConverter(100345,8)); // 303771 console. log (baseConverter(100345,16));// 187F9 console. log (baseConverter (100345, 35)); // 2BWO |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com