在Javascript中“打开”特定位[关闭]

Posted

技术标签:

【中文标题】在Javascript中“打开”特定位[关闭]【英文标题】:Turning specific bits 'on' in Javascript [closed] 【发布时间】:2021-03-11 18:15:14 【问题描述】:

我正在尝试在 javascript 中解决以下问题:

如果在 8 位数字中放置 2 个(或更多)“on”位,我如何生成正确的数字来表示该字节?例如:

给定数字 1 和 3,这意味着第 1 个最高(最高有效)和第 3 个最高(第 3 个最高有效)位打开,我如何返回 10100000 或 160?给定 1、3 和 7,如何返回 10100010 等?

【问题讨论】:

【参考方案1】:

如果我明白了,类似的东西可能会起作用:

const onesToNum = (...args) => 
  const binaryStr = '00000000'
          .replace(/0/g, (_,idx) => 
            args.includes(idx+1) ? '1' : '0')
  return parseInt(binaryStr, 2)


console.log(onesToNum(1,3))

【讨论】:

@Bergi :您愿意说明您投反对票的原因吗?【参考方案2】:

您为此使用bit shift operator,并使用OR 不同的位:

1<<7 | 1<<5  ===  0b10100000

由于您是从左侧 (MSB) 开始计数,并且使用从 1 开始的索引而不是从 0 开始的索引,因此您可以从 8 中减去:

1<<(8-1) | 1<<(8-3) | 1<<(8-7)  ===  0b10100010

或right-shift256中的位:

256>>1 | 256>>3 | 256>>7  ===  0b10100010

【讨论】:

以上是关于在Javascript中“打开”特定位[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

地理定位在 GPS 关闭的情况下不起作用

Javascript运动检测[关闭]

电脑位置怎么关闭?

跨浏览器窗口大小调整事件 - JavaScript / jQuery

JSON格式有替代品吗? [关闭]

如何比较给定时间,落在特定时间范围之间 - javascript