微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我想采用的解决方案适用于 32 位,是此答案结尾的代码,来自 developer.mozilla.org(MDN),但添加了一些行用于 A) 格式化和 B) 检查数字在范围内。

有些人建议x.toString(2)这对底片不起作用,它只是在那里为他们贴上一个减号,这是不好的。

Fernando 提到了一个简单的解决方案,(x>>>0).toString(2);它适用于负数,但当 x 为正数时有一个小问题。它的输出以 1 开头,对于正数,它不是正确的 2s 补码。

任何不了解 2s 补码中以 0 开头的正数和以 1 开头的负数这一事实的人都可以在 2s 补码上检查此 SO QnA。什么是“2的补码”?

一个解决方案可能涉及为正数添加一个 0,我在此答案的早期版本中这样做了。有时可以接受 33 位数字,或者可以确保要转换的数字在 -(2^31)<=x<2^31-1 范围内。所以这个数字总是32位。但是,您可以在 mozilla.org 上使用此解决方案,而不是这样做

帕特里克的答案和代码很长,显然适用于 64 位,但有一个评论者发现的错误评论者修复了帕特里克的错误,但帕特里克在他的代码中有一些他没有评论的“神奇数字”并且有忘记了,帕特里克不再完全理解他自己的代码/它为什么起作用。

Annan 有一些不正确和不清楚的术语,但提到了 developer.mozilla.org解决方

注意 - 旧链接https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators现在重定向到其他地方并且没有该内容但正确的旧链接,当archive.org 检索页面!,可在此处获得https://web.archive.org/web/20150315015832/https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

那里的解决方案适用于 32 位数字。

代码非常紧凑,三行的函数

但是我添加一个正则表达式来格式化输出,以 8 位为一组。基于如何在 JavaScript 中将逗号打印为千位分隔符(我刚刚将其修改为从右到左将其分组为_3 秒_ 并添加 逗号 ,以从右到左分组为 8 秒添加 空格

而且,虽然Mozilla对nMask的大小(输入的数字)发表了评论......它必须在范围内,但当数字超出范围时,他们没有测试或抛出错误,所以我已经补充说。

我不确定他们为什么将参数命名为“nMask”,但我会保持原样。

https://web.archive.org/web/20150315015832/https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

function createBinaryString(nMask) {
  // nMask must be between -2147483648 and 2147483647
  if (nMask > 2**31-1) 
     throw "number too large. number shouldn't be > 2**31-1"; //added
  if (nMask < -1*(2**31))
     throw "number too far negative, number shouldn't be < 2**31" //added
  for (var nFlag = 0, nShifted = nMask, sMask = ''; nFlag < 32;
       nFlag++, sMask += String(nShifted >>> 31), nShifted <<= 1);
  sMask=sMask.replace(/\B(?=(.{8})+(?!.))/g, " ") // added
  return sMask;
}


console.log(createBinaryString(-1))    // "11111111 11111111 11111111 11111111"
console.log(createBinaryString(1024))  // "00000000 00000000 00000100 00000000"
console.log(createBinaryString(-2))    // "11111111 11111111 11111111 11111110"
console.log(createBinaryString(-1024)) // "11111111 11111111 11111100 00000000"

解决方法

我喜欢以二进制形式查看整数,无论​​是正数还是负数。

很喜欢这个问题,但是对于 JavaScript。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。