#1 什么是溢出
当前计算机采用2补码方式编码数字,以8位为例,表达的全部数值范围为 -128 -- 127。
正数符号位为0,负数符号位为1。
1000 0000表示 -128,快速计算方式是将其当作无符号数 128,然后减去 2^8, 全部过程为 128 - 256 = -128。
或者反码后加一,同样为 1000 0000 ,即128,当然是 -128。
溢出也就是数值逾越了当前数值表表达范围。例如 138 不在 -128 -- 127范围内。

#2 加法运算中的简单补救措施
例如 120 + 121,120和121都是正常范围内可以表达的数字,但其和 241 属于溢出。
再如 -120 -121,结果同为溢出。
第一种情况的处理: 强制类型转换为对应无符号数即可。
第二种情况的处理: 先使用neg指令,在输出时在结果前加负号,可得正确结果。 neg  等效于先取反再加1

#3 如何判断: 操作数同号 && 操作数与结果不同号

#4 范例与截图

 1 #include <stdio.h>
 2 typedef signed char INT8;
 3 
 4 int main(){
 5     INT8 m = 120;
 6     INT8 n = 121;
 7     INT8 r = m + n;
 8     printf("%u\n", (unsigned char)r);
 9 
10     m = -120;
11     n = -121;
12     r = m + n;
13     _asm{
14         neg r
15     }
16     printf("-%u\n", (unsigned char)r);
17 
18     getchar();
19     return 0;
20 }

结果:

241

-241

相关文章:

  • 2022-03-09
  • 2021-11-11
  • 2021-11-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-04
  • 2022-12-23
猜你喜欢
  • 2021-10-30
  • 2022-12-23
  • 2022-12-23
  • 2021-06-22
  • 2021-08-29
  • 2022-12-23
  • 2021-10-22
相关资源
相似解决方案