#include <stdio.h>
{
char num = 127;
num = num + 1;
printf("%d", num);
return 0;
}
输出为:-128 我应该添加输出镜头
答案 0 :(得分:0)
char
是一个在大多数系统上都占用1个字节(8位)的a。您的实现似乎有char
表示一个带符号的类型,但是在其他实现上,它可以是无符号的。有符号类型的最大值是2 ^(n-1)-1,其中n是位数。因此 char 的最大值为2 ^(8-1)-1 = 2 ^ 7-1 = 128-1 = 127。最小值实际上是-2 ^(n-1)。这意味着最小值是-128。当您添加超过最大值的东西时,它会溢出并循环回到最小值。因此,如果您要进行char
算术,则为127 + 1 = -128。
您永远不会使用char
进行算术运算。请改用signed char
或unsigned char
。如果将char
替换为unsigned char
,程序将按预期打印128。请注意,仍然会发生溢出(无符号类型的范围是0到2 ^ n-1,因此,如果将1加到255,则unsigned char
就会溢出,给您0)。