我知道 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/