【问题标题】:reverse bits in byte ansi C字节 ansi C 中的反转位
【发布时间】:2014-04-15 19:14:29
【问题描述】:

我有一个函数可以反转字节中的位,但我不懂语法。为什么要用0x0802U & 0x22110U等二元运算(这个数字是多少)

unsigned char reverse(unsigned char B)
{
return (unsigned char)(((b * 0x0802U & 0x22110U) | (b * 0x8020U & 0x88440U)) * 0x10101U >> 16);
}

【问题讨论】:

标签: c reverse bits


【解决方案1】:

查看“Bit Twiddling Hacks”页面了解说明:

用 7 次操作(非 64 位)反转字节中的位 http://graphics.stanford.edu/~seander/bithacks.html

【讨论】:

  • 您应该在此处复制相关部分以使答案自成一体。
  • @paxdiablo 理想情况下我应该这样做,但我还需要粘贴链接中的前两个部分,这与 stackoverflow 最大行长度不匹配。
  • 还是没找到解释
  • 问题是,那个页面(顺便说一句绝对引用)实际上并没有解释 7 操作版本,只是 3 操作 64 位版本......
【解决方案2】:

Direct link to the correct Bit Twiddling Hacks section.

你应该做数学来看看为什么选择这些数字。

                                         abcd efgh
    *                          0000 1000 0000 0010
    ----------------------------------------------
                          0abc defg h00a bcde fgh0
    &                     0010 0010 0001 0001 0000
    ----------------------------------------------
                          00b0 00f0 000a 000e 0000


                                         abcd efgh
    *                          1000 0000 0010 0000
    ----------------------------------------------
                     0abc defg h00a bcde fgh0 0000
    &                0000 1000 1000 0100 0100 0000
    ----------------------------------------------
                     0000 d000 h000 0c00 0g00 0000


                          00b0 00f0 000a 000e 0000
    |                0000 d000 h000 0c00 0g00 0000
    ----------------------------------------------
                          d0b0 h0f0 0c0a 0g0e 0000
    *                     0001 0000 0001 0000 0001
    ----------------------------------------------
      d0b0 h0f0 dcba hgfe dcba hgfe 0c0a 0g0e 0000
    >> and convert to 8-bits
    ----------------------------------------------
                                         hgfe dcba

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    相关资源
    最近更新 更多