gpt4 book ai didi

c - C中signed char的自增操作行为

转载 作者:行者123 更新时间:2023-12-01 06:16:20 26 4
gpt4 key购买 nike

对于 C 中的 signed char,范围是从 -128 到 127。a+1(如代码中所示)如何生成 128 而不是 -128?随后的增量是正常的(ai 都是 -127)。

#include<stdio.h>
int main()
{
char i=127,a=127;
printf("%d\n",++i);//output is -128
printf("%d\n",a+1);//output is 128
//subsequent increment after this is -127 for a and i.
return 0;
}

最佳答案

当与算术运算符一起使用时,所有小整数类型(boolcharshort)都受到整数提升 在对它们执行任何算术之前。在 a + 1 表达式中,您的 a 被提升为 int 意味着该表达式实际上被解释为 (int) a + 1 char 的范围在这里不起作用。所有的计算都在int域中进行,结果的类型为int127 + 1128,这是您看到的打印内容。

您的++i 定义为i = i + 1。出于同样的原因,右侧计算为 (int) i + 1,这意味着在这种情况下,加法也在 int 的域中执行。稍后,结果被转换回 char 并存储回 i。添加本身不会溢出并产生 128,但随后转换回 char 会“溢出”,从而产生实现定义的行为。在您的情况下,实现定义的行为产生了 -128 的值作为 char 结果。

关于c - C中signed char的自增操作行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44814186/

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