❶ javascript輸入一個十進制數,將其轉換成二進制數。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
<script>
function dec2bin(th){
dec = th.value;
bin = "";
while (dec > 0) {
if (dec%2 != 0) { bin = "1" + bin; }
else { bin = "0" + bin; }
dec = parseInt(dec/2);
}
document.getElementById('show').innerHTML = bin;
}
</script>
</head>
<body style=" text-align:center; margin-top:30px;">
<input name="" type="text" onkeyup="dec2bin(this)" value="" size="20" maxlength="20" />
<div>轉換成二進制後的結果是:</div><div id="show"></div>
</body>
</html>
❷ js位運算符
之前對js的一些涉及到二進制的運算符一直似懂非懂,看到了就一臉懵逼,還得去控制台算一下。然後最近看演算法的時候又看到了這個運算符,這里就簡單介紹一下學習這些位運算符的過程。
注意: 以下運算均不涉及到小數。
先說這句話是什麼意思。左移位是二進制的一種運算,就是在不改變二進制數值32位長度的前提下,將每位的數字都向左移動,左邊移出去的直接丟棄,右邊空出來的位置用0填充。無符號就是保持符號位不變,即本來是正數,移位後一樣為正數。
這里以 7 << 2 為例。
首先將7轉為二進制是 0000 0000 0000 0000 0000 0000 0000 0111 .
然後對其向左移兩位.
得到值為 0000 0000 0000 0000 0000 0000 0001 1100 .
轉換為十進制為 28.即 7 << 2 = 28 。
然後我們對以上的運算過程做一個處理,將這些二進制轉換為我們熟悉的十進制。
對移位後的算式進行合並項可得到 2^4 + 2^3 + 2^2 = (2^2 + 2^1 + 2^0) * 2^2 ,即 2^4 + 2^3 + 2^2 = (2^2 + 2^1 + 2^0) * 2^2 = 7 * 2^2 。由此我們可得出 7 << 2 = 7 * 2^2 = 28 。
我們通過計算幾個簡單的左移位運算,與標准答案進行比較,驗證一下這個結論。
在控制台中以上幾個算式的結果為
答案完全一致。說明我們的結論是正確的。當然這個結論 僅限於那些二進制移位不會左移移出的數字的簡單運算 。當我們遇到一些簡單的可以口算的左移位運算時就可以使用這個結論快速得到結果,如果對於 99999 << 66 這種較復雜的運算你也用這個結論計算,也沒有人會介意。
下面我們看一下負數的左移位運算。以 -66 << 2 為例。
首先,我們先復習一下負數如何轉換為二進制。
負數轉換為二進制的步驟有三:
然後對其向左移兩位.
得到值為 1111 1111 1111 1111 1111 1110 1111 1000 .然後我們將其轉換成十進制。
轉換為十進制為 -264.即 -66 << 2 = -264 。
剛剛我們計算 -66 的二進製得到的是 1111 1111 1111 1111 1111 1111 1011 1110 。我們在控制台驗證一下我們得到的這個二進制。
我們比較一下下面幾個算式。
是的沒錯,進行無符號左移位運算時,當兩個數的絕對值相等時,其相同位數的移位的絕對值一定相等。
這里以 666 >> 3 為例。
首先將666轉換為二進制是 0000 0000 0000 0000 0000 0010 1001 1010 。
然後對其向右移三位。
得到值為 0000 0000 0000 0000 0000 0000 0101 0011 .
轉換為十進制為 83.即 666 >> 3 = 83 。
然後我們對以上的運算過程做一個處理,將這些二進制轉換為我們熟悉的十進制。
這個規律好像不太好總結?
這里以 -666 >> 3 為例。
因為是有符號的運算,所以這里不再適用上一小節說的js的特殊處理。先將-666轉換為二進制。
即-666的二進制形式為 1111 1111 1111 1111 1111 1101 0110 0110 ,然後對其進行有符號右移位運算
移位後得到的值為 1111 1111 1111 1111 1111 1111 1010 1100 ,是一個負值,我們將其轉成十進制。
我們對此結果進行驗證。
可見,我們的運算是完全正確的。
這里我們以 666 >>> 3 為例。
首先將666轉換為二進制是 0000 0000 0000 0000 0000 0010 1001 1010 。
然後對其向右移三位。
得到值為 0000 0000 0000 0000 0000 0000 0101 0011 .
轉換為十進制為 83.即 666 >> 3 = 83 。
這里以 -666 >> 3 為例。
因為是有符號的運算,所以這里不再適用上一小節說的js的特殊處理。先將-666轉換為二進制。
即-666的二進制形式為 1111 1111 1111 1111 1111 1101 0110 0110 ,然後對其進行有符號右移位運算
移位後得到的值為 0001 1111 1111 1111 1111 1111 1010 1100 ,轉成十進制為536870828。
是不是超級大。因為是無符號右移位運算,所以在左邊空出部分不論正負都會填充0.
我們對此結果進行驗證。
可見,我們的運算是完全正確的。
注意:因為對負數進行無符號右移位運算時,所得結果很大,所以在使用過程中需要格外注意。
疑問:左移位和右移位根本都是只對位置進行了移動,那麼對於 x1 >> k = y1 和 y2 << k = x2 中的 x1 等於 x2 , y1 等於 y2 嗎?
不一定。因為我們不能確保移動過程中被丟棄的值均為0。但凡有一個1被丟棄,就不會相等。而如果被丟棄的都是0,那麼 x1 === x2 y1 === y2 。如下圖所示。
這里以 66 & 33 為例。
首先將兩個數轉換為二進制是 0000 0000 0000 0000 0000 0000 0100 0010 和 0000 0000 0000 0000 0000 0000 0010 0001 。
然後對其進行與運算。
得出結果為 0.
負數的與運算與正數並無區別,不做討論。
這里以 66 | 66 為例。
首先將兩個數轉換為二進制是 0000 0000 0000 0000 0000 0000 0100 0010 和 0000 0000 0000 0000 0000 0000 0100 0010 。
然後對其進行與運算。
得出結果為 66.
負數的與運算與正數並無區別,不做討論。
這里以 66 ^ 66 為例。
首先將兩個數轉換為二進制是 0000 0000 0000 0000 0000 0000 0100 0010 和 0000 0000 0000 0000 0000 0000 0100 0010 。
然後對其進行與運算。
得出結果為 0.
負數的與運算與正數並無區別,不做討論。
這里以 ~66 為例。
首先將其轉換為二進制是 0000 0000 0000 0000 0000 0000 0100 0010 。
然後對其進行與運算。
將結果( 1111 1111 1111 1111 1111 1111 1011 1101 )轉換為十進制
得出結果為 -67.
這里我們再我看幾個例子。
從中我們可以看出, 位非操作就是對數字加一,然後取負 。我們可以寫個簡單的判斷方法來驗證。
位運算符運算結果非常有趣,在平時可以多加應用,但是一定要注意可能產生大數的預算,避免產生不必要的BUG。
這篇文章只是做了一個簡單的介紹。後面有空了會做一下在實際開發中的應用,雖然我可能很久都遇不到。
JavaScript學習指南:JS入門教程
❸ js怎麼將16進制字元串轉換成相應的16進制數
主要有兩個方法,其實都是對現有函數的使用:
方法1: sscanf()
函數名: sscanf
功 能: 從字元串格式化輸入
用 法: int sscanf(char *string, char *format[,argument,...]);
以上的 format 為 %x 就是將字元串格式化為 16 進制數
例子:
#include <stdio.h>
void main()
{
char* p = "0x1a";
int nValude = 0;
sscanf(p, "%x", &nValude);
printf("%d\r\n", nValude);
}
輸出:
26
方法2: strtol()
函數名: strtol
功 能: 將字元串轉換為長整數
用 法: long strtol(char *str, char **endptr, int base);
上面的base就是我們要轉換為幾進制數
例子:
#include <stdio.h>
#include <stdlib.h>
void main()
{
char* p = "0x1b";
char* str;
long i = strtol(p, &str, 16);
printf("%d\r\n", i);
}
輸出:
27
其實還有一種方法,就是用一個初始化為0~9~a~f的字元串數組,也就是一個十六進制對應表,用這個對應表即可算出一個十六進制字元串的數值,但這種發發太麻煩了,不推薦使用。
❹ 原碼·反碼·補碼及JS中二進制轉換
原碼·反碼·補碼都是為了解決一個問題而誕生的: 如何用二進製表示復數。 並且他們間有著某種進化的關系。
知道原理後我們可以自己寫函數將其轉為補碼
❺ 用JavaScript實現:輸入任意的進制n和數字d,將其轉換為10進制輸出.
function test(n,d){
if(isNaN(n)){
return "n必須是數字!";
}
/*只考慮數字的情況.因為n可以是隨便的數字.
如果說n=16那就16進制可以用上ABCDEF
那麼如果輸入100 你要用什麼符號?
所有隻考慮數字的情況.輸入的必須是數字.省的麻煩.
還有小數之類的這里就不處理了*/
if(isNaN(d)){
return "d必須是數字!";
}
var src = (d + "").split("");
var res = 0;
for(i=0;i<src.length;i++){
if(src[i]>=n){
return d + "不是 "+n+" 進制數";
}
res += Math.pow(n,(src.length-1-i))*src[i];
}
return res;
}
alert(test(2,101));// 提示 5
alert(test(2,102));//提示 102 不是 2 進制數
❻ js 如何把ASCII字元轉換為16進制數字
在chrome里,字元串有個charCodeAt()方法
例如"a".charCodeAt()為97,如果是"ba".charCodeAt()為98,默認第一位,即index為0;
"ba".charCodeAt(0)=98,而"ba".charCodeAt(1)為97
10進制內轉16進制:
如17的16進制
(17).toString(16)
=
"11"
合起來就是("a".charCodeAt()).toString(16)
=
"61"
嫌麻煩容可以封裝一個函數實現。
數字變字元:
String.fromCharCode(98)
=
"b"
❼ JS有沒有將數字轉成二進制的方法
將十進制抄轉為二進制:
var a = 10;
var b = a.toString(2);
b即為10的二進製表示。但是注意b此時是字元串。
toString()默認參數為10,即把數字轉換為十進制字元串,可接受2-36整數作為參數。
將二進制轉為十進制:
var a = "10100110";
var b = a.parseInt(a, 2);
b即為a的十進製表示。
parseInt將字元串轉換為數字,接受兩個參數,第一個是要轉換的字元串,第二個可省略,表示要解析的數字基數,可接受2-36整數作為參數。默認情況下會自動判斷:若字元串以0x開頭,則之後的字元以十六進制解析;以0開頭,以八進制解析,0-9,以十進制解析。
❽ js實現16進制轉換為Base64
新建文件 HexToBase64.js ,內容如下:
使用 import ... form ...
❾ js怎樣把10進制數轉換成16進制數顯示
js把10進制轉為16進制並顯示:
定義一個轉換函數:
var w=function(s){
document.write('<br>'+s)
};
轉換方法:
w(parseInt(x,16));
比如傳入15,列印出來的結果是:0xF。
❿ js 怎樣將十六進制轉成十進制
parseInt(數, 進制)
其中string為要轉換的字元串,radix為二進制,八進制,十六進制或十進制。內
自己調試以容下。
不行的話你可以吧二進制轉為十進制使用。並不影響你的而邏輯
同意yanzilisan183 的觀點。