网站地图    收藏   

主页 > 前端 > javascript >

js栈思路10进制转2进制

来源:未知    时间:2022-11-14 16:15 作者:小飞侠 阅读:

[导读] 现实生活中,我们主要使用十进制。但在计算科学中,二进制非常重要,因为计算机里的所 有内容都是用二进制数字表示的(0和1)。没有十进制和二进制相互转化的能力,与计算机交...

现实生活中,我们主要使用十进制。但在计算科学中,二进制非常重要,因为计算机里的所

有内容都是用二进制数字表示的(0和1)。没有十进制和二进制相互转化的能力,与计算机交流

就很困难。

要把十进制转化成二进制,我们可以将该十进制数除以2(二进制是满二进一)并对商取整,

直到结果是0为止。举个例子,把十进制的数 10转化成二进制的数字,过程大概是如下这样。

image.png

大学的计算机课一般都会先教这个进制转换。下面是对应的算法描述。


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

添加评论