【问题标题】: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))

    【讨论】:

    • @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
    

    【讨论】:

      猜你喜欢
      • 2013-06-28
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多