将二进制转换为十进制并返回的javascript程序
我试过这个将二进制转换为十进制并返回的javascript程序,javascript,Javascript,我试过这个 function binToDec(num) { let dec = 0; for(let i = 0; i < num.length; i++) { if(num[num.length - (i + 1)] === '1') { dec += 2 ** i; } } return dec; } console.log(binToDec('1010')); function binTo
function binToDec(num) {
let dec = 0;
for(let i = 0; i < num.length; i++) {
if(num[num.length - (i + 1)] === '1') {
dec += 2 ** i;
}
}
return dec;
}
console.log(binToDec('1010'));
function binToDec(num) {
let bin = parseInt(num, 2);
return bin;
}
console.log(binToDec(1010));
我知道这也行,但我不寻找这个答案
谢谢您的帮助。我只是从字符串的最后一个字符开始,并将此位置的值添加到结果中
函数binToDec(num){
设dec=0;
for(设i=0;i
说明
想想10进制是如何工作的
909=900+9
= (9 * 100) + (0 * 10) + (9 * 1)
= (9 * 10**2) + (0 * 10**1) + (9 * 10**0)
如您所见,以10为基数的自然数可视为一个总和,其中每个项的形式如下:
数字*基**数字位置
这适用于任何基础:
base 2:0b101=(0b1*2**2)+(0b0*2**1)+(0b1*2**0)
基16:0xF0F=(0xF*16**2)+(0x0*16**1)+(0xF*16**0)
因此,这里有一个自然数的可能抽象:
function natural_number (base, digits) {
var sum = 0;
for (var i = 0; i < digits.length; i++) {
digit = digits[i];
digit_position = digits.length - (i + 1);
sum += digit * base**digit_position;
}
return sum;
}
这相当于:
if (num[num.length - (i + 1)] === '1') {
dec += 2 ** i;
}
你明白了吗?:-)
可供替代的
您觉得不适合使用求幂运算符(**
)?有一个变通办法。你有没有注意到一个数字乘以10只不过是将它的数字向左移动一次而已
909*10=9090
实际上,将一个数字向左移动归结为将该数字乘以其基数:
number*=base
这适用于任何基础:
base 2:0b11*2=0b110
基数16:0xBEE*16+0xF=0xBEE0+0xF=0xBEEF
在此基础上,我们可以构建一个将数字数组转换为数字的算法。以base 10中的[9,0,9]
作为输入的执行跟踪如下所示:
init | 0 | n=0
加9 | 9 | n+=9
移位| 90 | n*=10
加上0 | 90 | n+=0
移位| 900 | n*=10
加9 | 909 | n+=9
下面是一个可能的实现:
function natural_number (base, digits) {
var n = 0;
for (var i = 0; i < digits.length; i++) {
n += digits[i];
if (i + 1 < digits.length) {
n *= base;
}
}
return n;
}
然后展开此表达式:
((0+9)*10+0)*10+9)
= (0 + 9) * 10 * 10 + 0 * 10 + 9
= 9 * 10 * 10 + 0 * 10 + 9
= 9 * 10**2 + 0 * 10**1 + 9 * 10**0
你认识前面讨论的等式吗?:-)
奖金
反向功能:
function explode_natural_number (base, number) {
var remainder, exploded = [];
while (number) {
remainder = number % base;
exploded.unshift(remainder);
number = (number - remainder) / base;
}
return exploded.length ? exploded : [0];
}
|爆炸自然数(2,5)
< | [1, 0, 1]
>|分解自然数(3,5)//基数3(5=1*3**1+2*3**0):-)
< | [1, 2]
>|爆炸自然数(16,自然数(16,[11,14,14,15])//0xBEEF
< | [11, 14, 14, 15]
字符串到数字和数字到字符串:
function parse_natural_number (number, base) {
var ZERO = 48, A = 65; // ASCII codes
return natural_number(base, number.split("").map(function (digit) {
return digit.toUpperCase().charCodeAt(0);
}).map(function (code) {
return code - (code < A ? ZERO : A - 10);
}));
}
function stringify_natural_number (number, base) {
var ZERO = 48, A = 65; // ASCII codes
return String.fromCharCode.apply(
String, explode_natural_number(base, number).map(function (digit) {
return digit + (digit < 10 ? ZERO : A - 10);
})
);
}
10月至12月(“10”)
< | 8
>|数字至12月(“010”)
< | 8
> | 010 // :-)
< | 8
| dec|u|u|bin(8)
< | "1000"
很抱歉我的评论太晚了,但是可以将数字记录为数字而不是字符串,并且仍然返回true,因为当我将“1010”更改为1010时,它返回0您想要哪个true
呢?在哪里?
return ((0 + 9) * 10 + 0) * 10 + 9;
function explode_natural_number (base, number) {
var remainder, exploded = [];
while (number) {
remainder = number % base;
exploded.unshift(remainder);
number = (number - remainder) / base;
}
return exploded.length ? exploded : [0];
}
function parse_natural_number (number, base) {
var ZERO = 48, A = 65; // ASCII codes
return natural_number(base, number.split("").map(function (digit) {
return digit.toUpperCase().charCodeAt(0);
}).map(function (code) {
return code - (code < A ? ZERO : A - 10);
}));
}
function stringify_natural_number (number, base) {
var ZERO = 48, A = 65; // ASCII codes
return String.fromCharCode.apply(
String, explode_natural_number(base, number).map(function (digit) {
return digit + (digit < 10 ? ZERO : A - 10);
})
);
}
function bin_to_dec (number) {
return parse_natural_number(number, 2);
}
function oct_to_dec (number) {
return parse_natural_number(number, 8);
}
function dec_to_dec (number) {
return parse_natural_number(number, 10);
}
function hex_to_dec (number) {
return parse_natural_number(number, 16);
}
function num_to_dec (number) {
switch (number[0] + number[1]) {
case "0b" : return bin_to_dec(number.slice(2));
case "0x" : return hex_to_dec(number.slice(2));
default : switch (number[0]) {
case "0" : return oct_to_dec(number.slice(1));
default : return dec_to_dec(number);
}
}
}
function dec_to_bin (number) {
return stringify_natural_number(number, 2);
}