【问题标题】:Convert bit sequence to uint32_t in c++在 C++ 中将位序列转换为 uint32_t
【发布时间】:2015-06-25 11:42:51
【问题描述】:

用户用整数指定寄存器 (LFSR) 长度作为函数的参数,例如他输入数字 5。我需要用所有 1 位初始化这个 5 位长度的 LFSR(长度为 5 的它将是 11111 ) 并以 uint32_t 格式获取种子掩码 - 对于 5 长度寄存器,它将是 0x0001f

当用户仅将寄存器的长度输入为整数 5 时,为 5 位长度寄存器获取掩码 0x0001f 的最佳方法是什么?

【问题讨论】:

    标签: c++ binary bit-manipulation bitwise-operators uint32


    【解决方案1】:

    生成 n 位掩码(其中 n

    uint32_t mask = (1U << n) - 1U;
    

    解释:考虑 n = 5 的例子:

    1U << n = 1U << 5 = 0000 0000 0000 0000 0000 0000 0010 0000 = 0x20
    

    然后我们减去 1 得到:

                        0000 0000 0000 0000 0000 0000 0001 1111 = 0x1f
    

    【讨论】:

    • 谢谢你的解释——我明白了,你帮了我很多!
    【解决方案2】:

    另一种选择是

    std::uint32_t mask = ~(~0U << n);
    

    另外你必须确保unsigned int在你的系统上不小于32位,写起来可能会更好

    std::uint32_t mask = ~(~(std::uint32_t)0 << n);
    

    【讨论】:

      猜你喜欢
      • 2017-06-13
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多