gpt4 book ai didi

C 中的字符乘法

转载 作者:行者123 更新时间:2023-12-02 08:25:08 25 4
gpt4 key购买 nike

我有这样的代码:

#include <stdio.h>
int main()
{
char a=20,b=30;
char c=a*b;
printf("%c\n",c);
return 0;
}

这个程序的输出是X

如果 a*b=600 溢出,因为 char 值介于 -128 和 127 之间,这个输出怎么可能?

最佳答案

char 是有符号的还是无符号的是实现定义的。无论哪种方式,它都是一个整数类型。

无论如何,由于 integer promotions,乘法作为 int 完成并将结果转换为 char

如果该值不适合“较小”类型,则它是为 signed char 定义的实现,这是如何完成的。大多数(如果不是全部)实现只是简单地切断了高位。

对于 unsigned char,标准实际上要求(简要地)切除高位。

所以:

(int)20 * (int)20 -> (int)600 -> (char)(600 % 256) -> 88 == 'X'

(假设 8 位 char)。

有关详细信息,请参阅链接及其周围的段落。

注意:如果您启用编译器警告(一如既往的推荐),您应该会收到一个针对赋值的截断警告。这可以通过显式转换来避免(仅当您真正确定所有含义时)。 gcc 选项是 -Wconversion

关于C 中的字符乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32889944/

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