C移位所有int位sizeof int - 1 left然后right将返回-1,bit0 = 1

时间:2017-07-30 18:28:38

标签: c bitwise-operators

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

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

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

1 个答案:

答案 0 :(得分:1)

第一位你肯定意味着LSB对吗?所以假设您的二进制数看起来像

8 = 0001000
  MSB     LSB

然后你可以简单地用

检查LSB
int set = x & 0x1;

如果设置为0,则X的LSB为0,否则为1.