c - 负数的位表示

标签 c bit-manipulation

这是一个关于有符号整数位表示的疑问。比如你要表示-1的时候,就相当于(+1)的2的补码。所以 -1 表示为 0xFFFFFFF。现在,当我将我的数字移动 31 并打印结果时,它返回为 -1。

signed int a = -1;
printf(("The number is %d ",(a>>31));//this prints as -1

谁能给我解释一下这些位是如何表示负数的?

谢谢。

最佳答案

当最高位为零时,数字为正数。为 1 时为负数。

右移的负数继续向右移一个“1”作为最高位以保持数字为负数。这就是您得到该答案的原因。

有关二进制补码的更多信息,请参阅 this Stackoverflow question .


@Stobor 指出一些 C 实现可以将 0 移到高位而不是 1。[在维基百科中验证。]在 Java 中,它可靠地是算术移位。

但是提问者给出的输出显示他的编译器正在进行算术移位。

关于c - 负数的位表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1175700/

相关文章:

c - posix regcomp 和 regexec 线程安全吗?具体来说,在 GNU libc 上?

c - 使用 fscanf 读取 C 中的坐标时出现问题

c - 按位 AND 的行为与预期不同?

c - 将 n 字节整数拆分为单个字节的可移植方法

以太网传输时字节顺序的变化

c - 如何在 C 中为字符串数组动态分配内存?

c - 按位和求值

结构体中的C char指针数组,如何

字符指针

c - 在 C 中将 uint8 拆分为 4 个单元 2,以便稍后获得单元 10