为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蛊毒传说 2019-08-23 16:31:28
如何在JavaScript中将整数转换为二进制?我希望看到二进制中的整数,正数或负数。
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

function dec2bin(dec){

    return (dec >>> 0).toString(2);

}


dec2bin(1);    // 1

dec2bin(-1);   // 11111111111111111111111111111111

dec2bin(256);  // 100000000

dec2bin(-256); // 11111111111111111111111100000000

您可以使用Number.toString(2)函数,但在表示负数时会出现一些问题。例如,(-1).toString(2)输出是"-1"。


要解决此问题,可以使用无符号右移位运算符(>>>)将数字强制转换为无符号整数。


如果你运行(-1 >>> 0).toString(2)你将你的数字0位向右移动,这不会改变数字本身,但它将表示为无符号整数。上面的代码将"11111111111111111111111111111111"正确输出。


这个问题有进一步的解释。


-3 >>> 0 (右逻辑移位)将其参数强制转换为无符号整数,这就是为什么得到-3的32位二进制补码表示的原因。


查看完整回答
反对 回复 2019-08-23
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我用了一种不同的方法来提出这样做的东西。我决定不在我的项目中使用这个代码,但我想我会把它留在相关的地方,以防它对某人有用。

  • 不使用位移或二进制补码强制。

  • 你选择出来的位数(它检查'8','16','32'的有效值,但我想你可以改变它)

  • 您可以选择是将其视为有符号整数还是无符号整数。

  • 考虑到有符号/无符号和位数的组合,它将检查范围问题,但您需要改进错误处理。

  • 它还具有函数的“反向”版本,它将位转换回int。你需要它,因为可能没有别的东西会解释这个输出:D

function intToBitString(input, size, unsigned) {
	if ([8, 16, 32].indexOf(size) == -1) {
		throw "invalid params";
	}
	var min = unsigned ? 0 : - (2 ** size / 2);
        var limit = unsigned ? 2 ** size : 2 ** size / 2;
	if (!Number.isInteger(input) || input < min || input >= limit) {
		throw "out of range or not an int";
	}
	if (!unsigned) {
		input += limit;
	}
	var binary = input.toString(2).replace(/^-/, '');
	return binary.padStart(size, '0');}function bitStringToInt(input, size, unsigned) {
	if ([8, 16, 32].indexOf(size) == -1) {
		throw "invalid params";
	}
	input = parseInt(input, 2);
	if (!unsigned) {
		input -= 2 ** size / 2;
	}
	return input;}// EXAMPLESvar res;console.log("(uint8)10");res = intToBitString(10, 8, true);console.log("intToBitString(res, 8, true)");console.log(res);console.log("reverse:", bitStringToInt(res, 8, true));console.log("---");console.log("(uint8)127");res = intToBitString(127, 8, true);console.log("intToBitString(res, 8, true)");console.log(res);console.log("reverse:", bitStringToInt(res, 8, true));console.log("---");console.log("(int8)127");res = intToBitString(127, 8, false);console.log("intToBitString(res, 8, false)");console.log(res);console.log("reverse:", bitStringToInt(res, 8, false));console.log("---");console.log("(int8)-128");res = intToBitString(-128, 8, false);console.log("intToBitString(res, 8, true)");console.log(res);console.log("reverse:", bitStringToInt(res, 8, true));console.log("---");console.log("(uint16)5000");res = intToBitString(5000, 16, true);console.log("intToBitString(res, 16, true)");console.log(res);console.log("reverse:", bitStringToInt(res, 16, true));console.log("---");console.log("(uint32)5000");res = intToBitString(5000, 32, true);console.log("intToBitString(res, 32, true)");console.log(res);console.log("reverse:", bitStringToInt(res, 32, true));console.log("---");


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 720 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信