【发布时间】: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