【发布时间】:2021-06-05 02:09:06
【问题描述】:
#include <stdio.h>
int main() {
char c = 125;
c = c + 10;
printf("%d", c);
return 0;
}
这段代码的输出是-121。
这个输出是-121?能解释一下吗?
如果我用c 添加100 而不是10,则输出为-31。
为什么?
【问题讨论】:
-
char,没有signed或unsigned可以是其中之一。在您的平台上,char已签名,因此您会进行签名溢出,这是未定义的行为。此外,您应该使用格式字符串"%hhd"。 -
@ThomasJager:没有未定义的行为。
c+ 10中的加法是在int类型中执行的,因此不会溢出;它产生 135。赋值c = c+ 10;将其转换为char。根据 C 2018 6.3.1.3 3,转换是实现定义的。 -
@EricPostpischil 好点,没想到。
-
Mujahidul Islam,没有 ASCII 值 > 127。ASCII 值范围从 0 到 127。
char可以编码所有 128 个 ASCII 值以及其他非 ASCII 值。