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