C语言中数值类型是讲范围的,看你有几位,或者有几个字节。如果你给的数值大于当前类型表达的范围,就会产生溢出。
溢出是很有意义的,如果没有溢出,那么负数就无法表达了。正负数之间的加法运算就不能正确执行。(通过溢出,所以可以正确得出-1+1=0
)
#include <stdio.h>
/*
unsigned int 的边界是多少?
*/
int main(int argc, char const *argv[])
{
unsigned char a = 0;
a--;
printf("unsigned char max number = %d\n", a);
unsigned int b = 0;
b--;
printf("unsigned int max nunber = %u\n", b);
char c = 0;
while(--c <0);
printf("signed char max number = %d\n",c );
c++;
printf("signed char min number = %d\n",c);
int d = 0;
while (--d<0);
printf("signed int max number = %d\n",d );
d++;
printf("signed int min number = %d\n",d );
return 0;
}
结果输出:
clang: warning: treating ‘c’ input as ‘c++’ when in C++ mode, this behavior is deprecated [-Wdeprecated]
unsigned char max number = 255
unsigned int max number = 4294967295
signed char max number = 127
signed char min number = -128
signed int max number = 2147483647
signed int min number = -2147483648
[Finished in 3.2s]