数据溢出
1. 举个栗子
unsigned int num = -1;
printf("%u", num);
输出结果是什么呢?
结果:
为什么会这样?
解析:
首先在寄存器产生一个负数-1,它在计算机中存储的补码是
32个1,共32个二进制位,当按照赋值号赋给无符号num变量时,符号位变成数值位,所以按照无符号输出为4294967295。
2. 再举一个
short int s = 65535;
printf("%d", s);
输出结果:
解析:
寄存器产生一个正数65535,故补码是16个1,当按照赋值号赋给有符号的s变量时,最高位变成符号位,则原码100000…001,所以输出-1。