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