如何在JavaScript中将整数转换为二进制?

如何在JavaScript中将整数转换为二进制?

我希望看到二进制中的整数,正数或负数。


蛊毒传说
浏览 721回答 3
3回答

摇曳的蔷薇

function dec2bin(dec){    return (dec >>> 0).toString(2);}dec2bin(1);    // 1dec2bin(-1);   // 11111111111111111111111111111111dec2bin(256);  // 100000000dec2bin(-256); // 11111111111111111111111100000000您可以使用Number.toString(2)函数,但在表示负数时会出现一些问题。例如,(-1).toString(2)输出是"-1"。要解决此问题,可以使用无符号右移位运算符(>>>)将数字强制转换为无符号整数。如果你运行(-1 >>> 0).toString(2)你将你的数字0位向右移动,这不会改变数字本身,但它将表示为无符号整数。上面的代码将"11111111111111111111111111111111"正确输出。这个问题有进一步的解释。-3 >>> 0 (右逻辑移位)将其参数强制转换为无符号整数,这就是为什么得到-3的32位二进制补码表示的原因。

慕姐4208626

我用了一种不同的方法来提出这样做的东西。我决定不在我的项目中使用这个代码,但我想我会把它留在相关的地方,以防它对某人有用。不使用位移或二进制补码强制。你选择出来的位数(它检查'8','16','32'的有效值,但我想你可以改变它)您可以选择是将其视为有符号整数还是无符号整数。考虑到有符号/无符号和位数的组合,它将检查范围问题,但您需要改进错误处理。它还具有函数的“反向”版本,它将位转换回int。你需要它,因为可能没有别的东西会解释这个输出:Dfunction&nbsp;intToBitString(input,&nbsp;size,&nbsp;unsigned)&nbsp;{ if&nbsp;([8,&nbsp;16,&nbsp;32].indexOf(size)&nbsp;==&nbsp;-1)&nbsp;{ throw&nbsp;"invalid&nbsp;params"; } var&nbsp;min&nbsp;=&nbsp;unsigned&nbsp;?&nbsp;0&nbsp;:&nbsp;-&nbsp;(2&nbsp;**&nbsp;size&nbsp;/&nbsp;2); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;limit&nbsp;=&nbsp;unsigned&nbsp;?&nbsp;2&nbsp;**&nbsp;size&nbsp;:&nbsp;2&nbsp;**&nbsp;size&nbsp;/&nbsp;2; if&nbsp;(!Number.isInteger(input)&nbsp;||&nbsp;input&nbsp;<&nbsp;min&nbsp;||&nbsp;input&nbsp;>=&nbsp;limit)&nbsp;{ throw&nbsp;"out&nbsp;of&nbsp;range&nbsp;or&nbsp;not&nbsp;an&nbsp;int"; } if&nbsp;(!unsigned)&nbsp;{ input&nbsp;+=&nbsp;limit; } var&nbsp;binary&nbsp;=&nbsp;input.toString(2).replace(/^-/,&nbsp;''); return&nbsp;binary.padStart(size,&nbsp;'0');}function&nbsp;bitStringToInt(input,&nbsp;size,&nbsp;unsigned)&nbsp;{ if&nbsp;([8,&nbsp;16,&nbsp;32].indexOf(size)&nbsp;==&nbsp;-1)&nbsp;{ throw&nbsp;"invalid&nbsp;params"; } input&nbsp;=&nbsp;parseInt(input,&nbsp;2); if&nbsp;(!unsigned)&nbsp;{ input&nbsp;-=&nbsp;2&nbsp;**&nbsp;size&nbsp;/&nbsp;2; } return&nbsp;input;}//&nbsp;EXAMPLESvar&nbsp;res;console.log("(uint8)10");res&nbsp;=&nbsp;intToBitString(10,&nbsp;8,&nbsp;true);console.log("intToBitString(res,&nbsp;8,&nbsp;true)");console.log(res);console.log("reverse:",&nbsp;bitStringToInt(res,&nbsp;8,&nbsp;true));console.log("---");console.log("(uint8)127");res&nbsp;=&nbsp;intToBitString(127,&nbsp;8,&nbsp;true);console.log("intToBitString(res,&nbsp;8,&nbsp;true)");console.log(res);console.log("reverse:",&nbsp;bitStringToInt(res,&nbsp;8,&nbsp;true));console.log("---");console.log("(int8)127");res&nbsp;=&nbsp;intToBitString(127,&nbsp;8,&nbsp;false);console.log("intToBitString(res,&nbsp;8,&nbsp;false)");console.log(res);console.log("reverse:",&nbsp;bitStringToInt(res,&nbsp;8,&nbsp;false));console.log("---");console.log("(int8)-128");res&nbsp;=&nbsp;intToBitString(-128,&nbsp;8,&nbsp;false);console.log("intToBitString(res,&nbsp;8,&nbsp;true)");console.log(res);console.log("reverse:",&nbsp;bitStringToInt(res,&nbsp;8,&nbsp;true));console.log("---");console.log("(uint16)5000");res&nbsp;=&nbsp;intToBitString(5000,&nbsp;16,&nbsp;true);console.log("intToBitString(res,&nbsp;16,&nbsp;true)");console.log(res);console.log("reverse:",&nbsp;bitStringToInt(res,&nbsp;16,&nbsp;true));console.log("---");console.log("(uint32)5000");res&nbsp;=&nbsp;intToBitString(5000,&nbsp;32,&nbsp;true);console.log("intToBitString(res,&nbsp;32,&nbsp;true)");console.log(res);console.log("reverse:",&nbsp;bitStringToInt(res,&nbsp;32,&nbsp;true));console.log("---");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript