计算机中数相加(相减)的溢出原因详细解释
这个问题可能困惑很多初学者,之前网上的解释也大都比较简单,我来整理一份全面详细的解答 1,首先你要明白,计算机中的符号数有三种表示方法,即 原码 、 反码 和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理。 同时,加法和减法也可以统一处理 (这里可以参考 点击打开链接 ,里面有解释补码怎么写)。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。 2,明白了计算机中数是以补码形式存在后,我们举例分析,比如我int a,分配给a八位二进制,因为要留一位做符号位(正负号),所以a能表示的数的范围(补码的形式)(实际上正数补码是其本身,负数补码是在原码(也就是二进制表示其正数的基础上符号位不变取反加一)是-2^(8-1)~ 2^(8-1)-1),之所以负数比正数范围大一,是因为补码中的符号位即表示符号,也可以表示数值如1000,0000(补码)表示-128,这是指在表示端点值的时候符号位才有双重含义。 3,这里举个负数补码计算的例子,分配八位计算-5-4=-9,首先-4的补码,先算4的原码0000,0100,取反加一1111,1100,同理-5补码1111,1011两个补码相加得1,1111