gpt4 book ai didi

C - 超过字符限制 - 标准规则

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:58 25 4
gpt4 key购买 nike

这段代码:

signed char a = 128;
a++;
printf("%d", a);

打印“-127”的值。我明白为什么会这样,基本上当值达到限制并从那里开始时,值会“重置”,但我很难确定这是在标准中指定的,还是只是我的编译器执行的随机操作?

最佳答案

假设最常见的平台具有 8 位 char 类型和 2 的补码(x86、ARM、MIPS、PPC、MSP430 等),将发生以下情况:

  • 128 对于 signed char 来说太大了。它以实现定义的方式转换为signed char。通常它只是被截断和位复制 (1:1)。在 2 的补码中,0b1000000signed char 中十进制 -128 的 2 的补码表示。
  • 下面的加法是基础数学:-128 + 1 -> -127

在其他平台上,结果会有所不同,但很可能它们只使用 int 常量 128 的低位。

要检测此类缺陷(但不是全部),请启用编译器警告并注意它们。 gcc 将为初始化程序报告截断警告 (-Wconversion)。

关于C - 超过字符限制 - 标准规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43719184/

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