【问题标题】:C shifting all int bits sizeof int - 1 left and then right returns -1 for bit0= 1 [duplicate]C将所有int位sizeof int - 1左移然后右移,对于bit0 = 1返回-1 [重复]
【发布时间】:2017-07-30 18:28:37
【问题描述】:

使用 C 我想知道 int x 的第一位是 1 还是 0,所以我只是做了这样的事情:

int y = (x<<(sizeof(int)*8)-1)>>((sizeof(int)*8)-1);

问题是,当 y 预期为 0...01 时,它返回 -1。但我坚持 -1 的表示是 1...11。 为什么会发生这种情况,因为 y 不是满的,或者是吗?

【问题讨论】:

  • 代码为某些值调用未定义的行为。移位时使用无符号类型。并且不保证一个字节有 8 位。要么使用CHAR_BIT,要么使用来自stdint.h 的更好的固定宽度整数(不需要sizeof)。也不能保证“但我认为 -1 的表示是 1...11”。这取决于您的平台(不过,它在 x86、ARM、PPC、MIPS 等平台上)。
  • 你正在用螺丝刀钉钉子。请参阅 CRoemheld 的答案,其中清楚地描述了锤子的使用。

标签: c bitwise-operators


【解决方案1】:

您肯定是指 LSB 对吗?所以假设你的二进制数看起来像

8 = 0001000
  MSB     LSB

然后你可以简单地检查 LSB

int set = x & 0x1;

如果set为0,则X的LSB为0,否则为1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2021-05-18
    • 2011-03-07
    • 2014-08-19
    • 2020-09-20
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多