【问题标题】:Turning specific bits 'on' in Javascript [closed]在Javascript中“打开”特定位[关闭]
【发布时间】:2021-03-11 18:15:14
【问题描述】:
我正在尝试在 JavaScript 中解决以下问题:
如果在 8 位数字中放置 2 个(或更多)“on”位,我如何生成正确的数字来表示该字节?例如:
给定数字 1 和 3,这意味着第 1 个最高(最高有效)和第 3 个最高(第 3 个最高有效)位打开,我如何返回 10100000 或 160?给定 1、3 和 7,如何返回 10100010 等?
【问题讨论】:
标签:
javascript
binary
binary-operators
【解决方案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))
【解决方案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