c - 负数如何存储在内存中?如何知道位表示?

标签 c binary bit-manipulation bit

我知道 MSB、LSB、符号和幅度 1 和 2 的补码等。现在,我想知道我是否正在编写和编写进行一些位操作的程序,我将如何检查内存中的实际位级数据?

int a = -1; 我怎么知道它是 1001 还是 1110 还是 1111 在 4-位表示?

如何找出我的实现用来表示负数的方法?

我正在寻找某种方法来检查 C 程序的位级数据。

我当前的平台是 Ubuntu 12.04 LTS。再一次,问题不在于它是如何完成的。它是关于如何发现或证明它是以某种方式完成的。

最佳答案

union { int i; unsigned u; } x;
x.i = -1;

现在 x.u 为您提供具有相同位的无符号整数。只有一种方法可以表示无符号数,因此您可以检查一下。 (提示:它很可能是二进制补码。)

printf("%x\n", x.u);

上面的打印语句将打印出无符号整数的十六进制表示,您可以使用它来确定位数。

关于c - 负数如何存储在内存中?如何知道位表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126645/

相关文章:

Ruby:为什么这个二进制文件中有一个字母?

Java 字节移位

Java 如何将 String 存储/表示为 long。然后从 long 到 String

c - 如何在不使用 C 中的库函数的情况下以年、月和日为单位查找人的年龄(忽略闰年)?

c++ - 正确的 C 指针表示法

c - 动态内存分配的二进制加法

c++ - 二进制数。检查以确保二进制输入是二进制时出错

Mysql按位运算和过滤

c - 使用 Memmove 将字符串复制到自身中会产生错误的输出

c - 将数组指针递增到最后一项之后