gpt4 book ai didi

c - 当int超出char范围时,将C中的int转换为char

转载 作者:行者123 更新时间:2023-12-04 12:13:10 26 4
gpt4 key购买 nike

请参见以下C代码。

#include <stdio.h>

int main(void)
{
char c1 = 3000;
char c2 = 250;
printf("%d\n",c1);
printf("%d\n",c2);
}


上面代码的输出是

-72

-6


请说明此处应用的整数到char的转换规则,因为3000和250都超出char范围(-128至127)。

最佳答案

请解释此处应用的整数到char转换规则,因为3000和250都在char(-128到127)范围之外。


首先请注意,C没有指定char是带符号的还是无符号的。剩下的事情要由实现来决定,它们在这一点上并不一致。在char是无符号的实现中,250在其范围内。

但是,假设您的char已签名,这确实与您的结果一致,则赋值语句中隐含的转换的C规则将不满足您:


新类型已签名且不能在其中表示值;结果是实现定义的,还是引发实现定义的信号。


C2011 6.3.1.3/3

显然没有信号发出,因此结果是实现定义的。在各种可能性中,每个分配值的最低有效CHAR_BIT位存储在目标变量中。

然后,当您调用printf()时,还有一个额外的转换。参数从char提升为int,并且由于int可以表示类型为char的所有值,因此其中一个是保留值的。这使我们可以得出结论,通过仅保留最低有效位并将其解释为8位二进制补码,您的实现将int转换为char确实是合理的。

关于c - 当int超出char范围时,将C中的int转换为char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50634428/

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