c语言二进制整数补码,关于二进制:计算机中的整数表示-C

C是否定义整数的二进制表示形式,例如 一个,两个的补码...或者是这个

表示处理器(计算机或其他)依赖吗?

用C语言编写的示例代码:

short a = -5;

我需要在哪里知道a是二进制补码1111 1111 1111 1011还是

带符号的位表示形式1000 0000 0000 0101?

与处理器无关,表示与语言实现有关。

二进制补码的99.9999%。 您可以使用格式将值显示为十六进制(将%X与printf或sprintf一起使用)。

C支持带符号整数的以下三种表示形式:

2的补码(最常见的情况是,您不太可能在实践中看到其他人)

1的补码

符号和大小

C还允许表示中有一些填充(非值)位,这在实践中也很少见。

C没有定义整数应按大端或小端还是其他字节顺序存储在内存中。

如果要查找特定平台上整数的精确表示方式,则需要分析基础内存。另外,如果-INT_MAX == INT_MIN + 1,则您具有2的补码表示形式,否则不确定,它是三个中的哪一个。

我认为可以安全地假设这些天没有填充位,并且表示形式是2的补码。

我对此表示赞成,但例如,根据6.5p5,如果INT_MAX == 32768和INT_MIN == -32767,则-INT_MAX可能是未定义的行为。

@modifiablelvalue(INT_MAX = 32768)毫无意义(尽管INT_MIN = -32767可以)。

也许更好的测试是:unsigned int x = INT_MIN; x += INT_MAX; if (x != 0) { * Twos complement * }

@modifiablelvalue应该可以,是的。

@modifiablelvalue实际上,该标准说,在带符号的非负整数中,所有值位都具有与随附的无符号整数相同的值。它还保证无符号整数可以表示2^(number of value bits) - 1(含)以下的值。因此,INT_MAX必须为2^(some integer) - 1,而不能为2^(some integer)。

这如何使INT_MAX(如32768)不具备将基础二进制表示形式为10000000 00000000作为有符号和无符号整数的资格?

您的结论似乎无效。

@modifiablelvalue我不是在谈论32768的二进制形式。我说32768不能是INT_MAX的值。但是32767可以。

仔细阅读6.2.6.2之后,您似乎很正确。在这样的时候,我希望自己能更谦虚一些。

@modifiablelvalue我也犯了错误。是人类,所以它不可避免。 :)

它与平台有关,与大端字节序相同。

某些类型的数字大小也取决于平台。

整数的表示形式取决于平台(处理器)。请参阅字节序。

整数的二进制表示形式取决于平台,如果平台遵循小尾数,则整数将-ve no.s存储为2的补码。

a= -5;

b = 5;

printf("%d %d", a, b);

printf("

%u %u", a, b);

将显示,

-5 5

4294967291 5

有符号短-5为0xFFFB。符号+绝对值表示没有任何意义。

加法和减法不关心有符号/无符号类型。如果将0xFFFB和0x0005相加,将得到0x0000。如果您尝试使用0x8005 + 0x0005,您将得到0x800A,这将基于您的假设-10(这是胡说八道)。该数字是二进制补码,但是对于短数字,它只是-x = 2 ^ 16-x(mod 2 ^ 16)。

C标准不能保证的signed short -5 is 0xFFFB。

标准确实没有讲二进制表示。这意味着,对主要问题的回答是"否",但与通常不同的数字表示将完全是愚蠢的。请提供此类(或其他)愚蠢数字表示形式的示例。

底数减去二? ;) 开玩笑。

问题不是数字如何存储,而是数字如何表示。例如。我不关心int64的字节序,如果我想通过检查最后一位知道数字是偶数还是奇数。您不必关心它在内存中是最后还是第一个或中间,或者数字表示形式周围或内部是否有填充。

如果要知道其偶数还是奇数,请将数字强制转换为任何无符号类型,然后直接执行& 1或直接执行% 2而不进行强制转换。

那就是我所说的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值