【问题标题】:question about swap bits [closed]关于交换位的问题[关闭]
【发布时间】:2010-06-29 16:26:24
【问题描述】:

我对这个话题有疑问,我认为答案看起来不正确

Swap bits in a number in C

1110 1011 等于 235 但我得到 3051 为什么?

【问题讨论】:

  • 您使用的是 8 位无符号字符吗?你一定不是,因为你得到 3051 作为你的答案。如评论中所述,代码仅适用于 8 位数据类型。

标签: c bit-manipulation


【解决方案1】:

十进制的3051 是二进制的101111101011。如果您像这样将它分成四位段:1011 1110 1011,您会看到最低四位在您想要的八位之上重复。原因是您没有屏蔽应该是前四位的值。

所以不要像这样:

(c >> 4) | ((c & 0x0f) << 4)

或类似的东西:

((c >> 4) | (c << 4)) & 0xff

你只需要这个:

(c >> 4) | (c << 4)

【讨论】:

    【解决方案2】:

    您很可能确实有正确的数字,但您使用%d 打印它而不将其转换为 int(或其他有趣的方式)你显示它)。

    我这么说是因为(3051 &amp; 235) == 235,这不太可能是随机发生的巧合。

    【讨论】:

    • 转换为int 不会有任何好处——3051 将适合int。为了做任何好事,您需要强制转换为unsigned char(这是可疑的 - 产生 3051 的代码显然需要修复,而不是捏造,至少 IMO)。
    【解决方案3】:

    您只显示了 8 位,这意味着最大可能值为 28-1,即 255。

    二进制中的 3051 是:1011 1110 1011,因此,您显然已经将最不重要的 nybble 复制到了第三个 nybble。

    【讨论】:

      猜你喜欢
      • 2015-07-08
      • 2023-03-23
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2013-05-13
      • 2015-01-13
      相关资源
      最近更新 更多