C是否定义整数的二进制表示,例如一个,二进制补码......或者这个表示处理器(计算机或其他东西)依赖?
用 C 编写的代码示例:
short a = -5;
我需要在哪里查看以了解a
二进制补码1111 1111 1111 1011
还是有符号位表示1000 0000 0000 0101
?
C 支持有符号整数的以下三种表示形式:
C 还允许在表示中存在一些填充(非值)位,这在实践中也是非常不常见的。
C 没有定义整数是否应该以大端或小端或其他字节顺序存储在内存中。
如果您想了解整数在特定平台上的精确表示方式,则需要分析底层内存。此外,如果-INT_MAX == INT_MIN + 1
,您有一个 2 的补码表示,否则不确定它是三个中的哪一个。
我认为现在可以安全地假设没有填充位并且表示是 2 的补码。
它依赖于平台,与小/大端相同。此外,某些类型的数量大小取决于平台。
整数的表示取决于平台(处理器)。请参阅字节顺序。
整数的二进制表示取决于平台,如果平台遵循小端序,则整数然后 -ve no.s 存储为 2 的补码。
a= -5;
b = 5;
printf("%d %d", a, b);
printf("\n%u %u", a, b);
会显示,
-5 5
4294967291 5
有符号短 -5 是 0xFFFB。符号+绝对值表示没有意义。加法和减法不关心有符号/无符号类型。如果您添加 0xFFFB 和 0x0005,您将得到 0x0000。如果您尝试 0x8005 + 0x0005,您将得到 0x800A,这将根据您的假设 -10,这是无稽之谈。该数字是二进制补码,但它只是 -x = 2^16 - x (mod 2^16) 用于短数字。