有進位不一定溢出
有溢出不一定進位
因為,溢出是結果超過了機器能表達的范圍,有可能沒有進位
而最高位進位時分情況,當最高位(符號位)進位時伴隨次高位(真值最高位)的進位,就不會產生溢出
比如
bit 6->bit 7有進位,bit 7->bit 8有進位
bit8,7,6,5,4,3,2,1,0
1 1 1 1 1 1 1 1(-1)
+0 0 0 0 0 0 0 1(+ 1)
0 0 0 0 0 0 0 0( 0 ) OF=0
bit 6->bit 7有進位,bit 7->bit 8無進位
bit8,7,6,5,4,3,2,1,0
0 1 1 1 1 1 1 1(+127)
+0 0 0 0 0 0 0 1(+ 1)
1 1 1 1 1 1 1 1( -1 ) OF=1(因為:正數+正數=負數)
bit 6->bit 7無進位,bit 7->bit 8有進位
bit8,7,6,5,4,3,2,1,0
1 1 1 1 1 1 1 0(-2)
+1 0 0 0 0 0 0 1(- 1)
0 1 1 1 1 1 1 1(+127) OF=1(因為:負數+負數=正數)
從原理上來看,計算機用補碼表示數字,只有最高位進位沒有次高位進位的時候會產生溢出,但是最高位和次高位同時進位的時候沒有溢出
因為1.最高位(符號位)進位而次高位(真值最高位)沒有進位時,一定是2個負數相加,進位后產生負溢出,即兩個負數相加產生正數
2.次高位進位而最高位沒有進位時,一定是2個正數相加,進位后使符號位產生改變(正溢出),倆正數相加產生負數
3.最高位和次高位同時進位時,一定是次高位的進位導致最高位再次進位,即一正一負相加,比如11111111(-1)+00000001(+1)最高位進位,但結果依然正確,沒有發生溢出
所以有進位不一定溢出,有溢出不一定(最高位)進位