261359695 发表于 2011-4-10 23:31:11

关于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.

小甲鱼 发表于 2011-4-18 15:55:22

负数是以补码的形式表现的。

补码的求值方法对除符号位以外的数取反+1。

1000 0000 0000 0000

结果是111 1111 1111 1111 + 1 的值把符号为给覆盖了,所以叫做溢出。

他的值相当于1000 0000 0000 0000 这时候符号位是存储在标志寄存器的SF位的,而带头的1是刚才进位的1,按值来说他是32768,加上SF位的1就是-32768,但是结果是溢出的结果。

鱼C工作室.YCGZS 发表于 2015-12-12 12:09:19

看来我清楚了:smile
页: [1]
查看完整版本: 关于C溢出值的运算?