gpt4 book ai didi

C- 为什么char c=129 会转换成-127?

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:13 27 4
gpt4 key购买 nike

如果我们将 +128 分配给 char 变量,那么它会被转换为 -128 因为二进制等价(10000000-第一位表示符号 ).129 的二进制等价于 10000001,它将转换成什么值?

char c=129;

谢谢,S

最佳答案

其实有几种可能。

如果char是有符号类型,则

char c = 129;

隐式地将 int 值转换为 char。结果是实现定义的(或者它可以引发一个实现定义的信号,但我不知道有任何实现可以做到这一点)。在大多数实现中,转换会产生 -127,因为有符号类型是使用补码表示的。在无符号 8 位类型中,10000001 表示值 129;在有符号 8 位类型中,相同的位模式表示-127;转换不需要保持相同的位模式,但它通常会这样做。

如果普通 char 是无符号类型(在某些系统上是这样),则值 129char 的范围内,并且转换仅产生值 129

但是所有这些都假定 char 是 8 位。 C 标准要求 CHAR_BIT(一个字节中的位数,或等效于 char 对象中的位数)至少 8,但它允许它更大。您不太可能遇到 CHAR_BIT > 8 的系统,但在 DSPs 的 C 实现中并不少见。 .

依赖于这一切很少是一个好主意。无论您试图通过将 129 分配给 char 对象来完成什么,很可能有更好、更清晰、更便携的方法来实现。

关于C- 为什么char c=129 会转换成-127?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20756626/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com