在 JavaScript 中將數字轉換為二進位制格式
將數字轉換為二進位制是一個相當複雜的過程。如果我們坐下來手動轉換數字,結果很容易出錯。我們如何將數字更改為二進位制格式?JavaScript 沒有很多內建函式可以這樣做。我們將介紹如何在 JavaScript 中將數字轉換為二進位制。
在 JavaScript 中建立一個將數字轉換為二進位制的函式
在進入程式碼之前,我們需要了解從十進位制數(基數為 10)到二進位制數(基數為 2)的轉換過程。為簡單起見,我們將在本文中介紹正整數的轉換。因此,負整數和浮點數的變化超出了本文的範圍。
瞭解轉換過程
給定一個整數(或 JavaScript 數字),我們不斷將數字除以 2 並捕獲其餘數,直到數字小於 2。例如,如果我們有一個數字 25,繼續將 25
除以 2
直到我們得到商小於 2。
除數 | 商 | 餘 | 位 |
---|---|---|---|
25 / 2 | 12 | 1 | 0 |
12 / 2 | 6 | 0 | 1 |
6 / 2 | 3 | 0 | 2 |
3 / 2 | 1 | 1 | 3 |
1 / 2 | 0 | 1 | 4 |
我們從高到低讀取數字。因此,數字 25 的二進位制值是 1101。
我們使用以下一組計算來確認二進位制值是否代表正確的十進位制數。二進位制數中表示的每個位都乘以 2
,為位位置值(從 0 開始)提供動力。
= 2^4*(1) + 2^3*(1) + 2^2*(0) + 2^1*(0) + 2^0*(1)
= 16 + 8 + 0 + 0 + 1
= 25
將數字轉換為二進位制格式的 JavaScript 程式碼
我們在上面討論的方法上構建以下程式碼。函式 convertToBinary1
控制作為引數傳遞的十進位制數的二進位制等價物。請注意,我們向後讀取結果。因此,在考慮所有上述因素的情況下建立了程式碼。
使用迭代
function convertToBinary1 (number) {
let num = number;
let binary = (num % 2).toString();
for (; num > 1; ) {
num = parseInt(num / 2);
binary = (num % 2) + (binary);
}
console.log(binary);
}
window.onload = function () {
console.log(convertToBinary1(25));
console.log(convertToBinary1(8));
}
輸出:
11001
1000
腳步
-
複製傳遞給函式的引數並將其儲存在臨時變數
num
中。 -
建立一個變數來儲存二進位制位。它本質上是字串型別,以便於處理。
-
開始迭代以生成二進位制位並讓它繼續直到數字不再能被 2 整除。
在每次迭代中,我們將數字除以
2
以獲得商。我們計算商的模
。此步驟將二進位制位生成為數字的模數,其中 2 生成二進位制位0
或1
。 -
將由
modulous
值生成的二進位制位附加到儲存每次迭代中生成的二進位制位的二進位制變數中。 -
一旦數字不再能被
2
整除(檢查條件(num / 2)> 1),迭代停止。 -
在最後一步,我們將結果記錄到控制檯。因此,我們得到作為引數傳遞給該函式的十進位制數的二進位制等效項。
使用遞迴
我們可以使用遞迴方法將十進位制位轉換為二進位制位。這種方法需要更少的程式碼行,但需要更多的思考。當數字不再能被 2 整除時,遞迴停止,並不斷呼叫自己,直到達到突破條件。遞迴很優雅,但與簡單迭代方法相比,函式呼叫堆疊消耗更多記憶體。
function convertToBinary (number, bin) {
if (number > 0) {
return convertToBinary( parseInt(number / 2) ) + (number % 2)
};
return '';
}
window.onload = function () {
console.log(convertToBinary(25));
console.log(convertToBinary(8));
}
輸出:
11001
1000
使用 toString(2)
函式將數字轉換為二進位制
toString()
函式對於將數字轉換為字串非常熟悉。但是,我們也可以使用它來將數字轉換為其二進位制格式。通常,它與 Number
物件一起使用以將數字轉換為二進位制格式。javascript 的 toString(2)
函式在用於數字物件時,返回數值的二進位制等效項,如下面的示例所示。該方法將基數值作為輸入。因此,我們可以使用它來將給定的數字轉換為其他基本系統(如 16 的基數(十六進位制)和 8 的基數(八進位制))。
(8).toString(2)
(25).toString(2)
(235).toString(2)
輸出:
"1000"
"11001"
"11101011"
請注意,toString(2)
方法的返回型別仍然是字串。因此,它將數字轉換為字串格式的二進位制位。