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