C语言学习(当网盘存储)
int i = 0x7fffffff, j;
j = i + 1;
printf("%d\n", j);
return 0;
//%d输出是-2147483648,发生溢出,改为unsigned int ,再有%d输出还是-2147483648,并没有变成正数2147483648,为什么呢?
unsigned int i = 0x7fffffff, j;
j = i + 1;
printf("%d\n", j);
return 0;
i = 0111 1111 1111 1111 1111 1111 1111 1111
j = i + 1 = 0111 1111 1111 1111 1111 1111 1111 1111 + 1
= 1000 0000 0000 0000 0000 0000 0000 0000 (原码)
因为%d只有四个字节,32位,而最高位必须是符号位,所以1000 0000 0000 0000 0000 0000 0