物极必反,正极为负,负极为正

来源:互联网 发布:无损检测软件 编辑:程序博客网 时间:2024/05/01 07:14

一个负数产生溢出,必然产生实际结果为正

一个正数溢出,必然产生实际结果为负

对八位来说:

所谓溢出,可以看成  8位当中除去符号位后  右边7个数据位的 '进位 或 借位' (当中的最高位) 
            实际运算中 又 只能向最左边的符号位   '进位 或 借位'  
            一旦 '进位或借位'  就必然使 符号位 变反, sf 也变反;  当然也得不到正确结果,这种'进位或借位'对我们所希望得到的结果,没有意义,符号位依然还是符号位.  

         如 +127 (+2)  128    我们希望的:符号位为0 , 实际:7位数据部分相加后 '进位' 01111111+00000010= 10000001 )

 

发生溢出只有两种可能,1、正数+正数,2、负数-负数 
对于正数+正数,如果溢出的话逻辑结果大于128而小于256,而8位寄存器中的表示符号位就为1,因此实际结果为负, 
对于负数相减溢出同理了

 

从原理上谈 首先 任意两个 负数相加 如果他们溢出了 如果因为溢出导致了实际结果为正,那么逻辑上真正的结果必为负、 

为什么呢 因为负数的最高位 必然是1 两个负数 相加如果发生溢出 那么 最高位和次最高位 
无非2种 可能 一种是 10,一种是11 
比如 0000000 
   0000000 
    10 0000000 最和次最高位结果为10 其中1被溢出最高位为0 

   1000000 
     1000000 
         结果为11 其中1被溢出最高位依然为1 
     
通过上面两个例子证明了如果因为溢出导致了实际结果为正,那么逻辑上真正的结果必为负,成立 
因为 1+1=10 最高位的1被舍弃 而0错误被当成了做高位

 

溢出 的含义就是超出 数值可以被表示的范围 对于8位来说 
0~127 为正 超过 127的数 就会成为负 
比如128  的逻辑值是128但是他的实际值是 -128 
因为发生了溢出 

0 0