关于C溢出值的运算?
本帖最后由 phpsize 于 2011-4-23 09:34 编辑#include <stdio.h>
void main()
{
short int a, b;
a = 32767;
b = a+1;
printf("%d, %d\n", a, b);
}
结果是:
a = 32767 0111 1111 1111 1111 1111
b = -32768 1000 0000 0000 0000 0000
b是溢出值,16位的1代表“-”符号的话,结果不是0吗?为什么等于-32768. 负数是以补码的形式表现的。
补码的求值方法对除符号位以外的数取反+1。
1000 0000 0000 0000
结果是111 1111 1111 1111 + 1 的值把符号为给覆盖了,所以叫做溢出。
他的值相当于1000 0000 0000 0000 这时候符号位是存储在标志寄存器的SF位的,而带头的1是刚才进位的1,按值来说他是32768,加上SF位的1就是-32768,但是结果是溢出的结果。 看来我清楚了:smile
页:
[1]