JavaScript 进位制转换、数位的表示形式
JavaScript 定义带进位的计算方法
进位系统使用 JavaScript 函数数字进制变换,进位制中可以使用的数字符号的数目,亦可称为进位制的基数或底数。
JavaScript 二进位制转为十进位制
二进位制是计算机技术广泛採用的数制。二进制数据是用 0 和 1 两个数位来表示。它的基数为 2,进位规则是逢二进一。
let result = parseInt(this.value, 2)
JavaScript 十进位制转为二进位制
let result = parseInt(this.value).toString(2);
将十进位数字除以 2 得到商和余数。将余数写下来,并把商作为下一次的被除数。重复步骤直到商等于 0 为止。将每次得到的余数由下往上排列,就得到对应的二进位数字。
function decimalToBinary(decimal) {
let binary = '';
while (decimal > 0) {
const remainder = decimal % 2;
binary = remainder + binary;
decimal = Math.floor(decimal / 2);
}
return binary;
}
console.log(decimalToBinary(10)); // "1010"
console.log(decimalToBinary(255)); // "11111111"
相关于二进位的一些计算
11111111 = 255 // 8 个位数
1111111111111111 = 65535 // 16 个位数
111111111111111111111111 = 16777215 // 24 个位数
11111111111111111111111111111111 = 4294967295 // 32 个位数
移位运算子 <<, >>
移位运算子 JavaScript 中用来对二进位数字进行位移操作的运算子。它可以把二进位数字中的位向左或向右移动指定的位数。左移运算符 << 会将左侧运算元向左移动指定的位数,并在右侧用 0 填充。左移 n 位等于乘以 2 的 n 次方。右移运算符 >> 会将左侧运算元向右移动指定的位数,并在左侧用原来的符号位填充。右移 n 位等于除以 2 的 n 次方取整。
let temp
temp = 14 << 2
temp = 56
将运算式的位元向左移位。
因为 14 (二进位为 00001110) 向左移两位元就等于 56 (二进位为 00111000)。
let temp
temp = 14 >> 2
temp = 3
将运算式的位元向右移位。
因为 14 (二进位为 00001110) 向左移两位元就等于 3 (二进位为 00000011)。
二进位的位元向左移位变化。
00000001 = 1
00000010 = 2
00000100 = 4
00001000 = 8
00010000 = 16
00100000 = 32
01000000 = 64
10000000 = 128
00000001 = 1 +1 = 2
00000011 = 3 +1 = 4
00000111 = 7 +1 = 8
00001111 = 15 +1 = 16
00011111 = 31 +1 = 32
00111111 = 63 +1 = 64
01111111 = 127 +1 = 128
11111111 = 255 +1 = 256
逻辑运算、位元运算 Logical Bitwise 位元运算子(Bitwise operator),数位设计 AND、OR、NOT、XOR 与补数等运算。
-
01111111 十进位 127 AND 00100000 十进位 32 = 00100000 十进位 32
-
01111111 十进位 127 OR 00100000 十进位 32 = 01111111 十进位 127
-
01111111 十进位 127 XOR 00100000 十进位 32 = 01011111 十进位 95
JavaScript 十进位制转为八进位制
let result = parseInt(this.value).toString(8);
JavaScript 十进位制转为十六进位制
十六进制 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , A , B , C , D , E , F
let result = parseInt(this.value).toString(16).toUpperCase();
JavaScript 十六进位制转为十进位制
let result = parseInt(this.value, 16);
parseInt
parseInt() 解析字串转换成整数,预设将字串转换为以十进位表示的整数。如果第一个字元就无法被解析,则会回传 NaN。
parseInt(string, radix)
string 欲转换的值。若第一个参数值的类型不是 String,会先使用 ToString 转换成字串。
radix 代表进位。数字的基数。该值介于 2 ~ 36 之间。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
parseInt(0.7418) = 0
parseInt(6.7418) = 6
parseInt(3.14) = 3
parseInt(-3.14) = -3
parseInt(-3.94) = -3
parseInt('010') = 10
parseInt('ABC') = NaN
parseInt('1F') = 1
parseInt('F1') = NaN
parseInt(0x0FF) = 255
parseInt('0FF') = 0
parseInt(01111) = 585
parseInt(01111,2) = NaN
parseInt('01111',2) = 15
parseInt(0xFFFFFF) = 16777215
parseInt(0xFFFfff) = 16777215
parseInt(-0xFFFFFF) = -16777215
parseInt(0xFFFFFFFF) = 4294967295
parseInt(0.1) = 0
parseInt(0.01) = 0
parseInt(0.001) = 0
parseInt(0.0001) = 0
parseInt(0.00001) = 0
parseInt(0.000001) = 0
parseInt(0.0000001) = 1
parseInt(0.00000001) = 1
parseInt(0.000000001) = 1
Number
转换为 Number 数值。如果物件的值无法转换为数位返回 NaN。
let num16 = 0xFFF; // 4095
let num8 = 0o1667; // 951
let num2 = 0b11111; // 31
let numE = 10e6; // 10000000
如果参数是 Date 物件 Number() 返回从 1970 年 1 月 1 日至今的「毫秒数」。
let d = new Date(1518260000000); // Sat Feb 10 2018 18:53:20 GMT+0800
Number(d); // 1518260000000
d.getTime(); // 1518260000000