我在阅读如何将字符转换为整数的示例,这是我看到的代码:
#include <stdio.h>
int main()
{
char ch1 = 125, ch2 = 10;
ch1 = ch1 + ch2;
printf("%d\n", ch1);
printf("%c\n", ch1 - ch2 - 4);
return 0;
}
据我所知,如果我们进行任何字符算术运算,char 类型将转换为 int。
那么为什么第一个 printf 语句的结果是 -121 而不是 135 呢?因为 int 范围可以处理 135,所以不会发生溢出。
第二个 printf 语句将打印 y,因为我们在 printf 中使用了 %c。
char
类型转换为int
类型。是的,但如果你要将结果存储在char
类型中,你需要将其再次转换回char
类型。 - bolovch1 = ch1 + ch2;
很可能会发生溢出。 - UnholySheepch1 + ch2
中,两个操作数都被提升为int
,并且结果适合于int
。在赋值中,右操作数被转换为char
。当值在转换为有符号整数类型时不适合时,结果不是溢出,这将具有未定义的行为,而是一个实现定义的结果或信号,根据 C 2018 6.3.1.3 3。 - Eric Postpischil