进位与溢出
?Cy位是進(jìn)位位,用來表示本次無符號數(shù)運(yùn)算結(jié)果的溢出溢出。由于無符號數(shù)的最高有效位只有數(shù)位意義而無符號意義,所以該位所產(chǎn)生的進(jìn)位應(yīng)該是本次運(yùn)算結(jié)果的實(shí)際進(jìn)位值。所以說:進(jìn)位位Cy是在給定二進(jìn)制數(shù)的位數(shù)范圍內(nèi),代表了本次運(yùn)算結(jié)果的溢出情況。另一方面,它所保存的進(jìn)位值有時(shí)也是有用的。例如,雙字長運(yùn)算時(shí),可以利用進(jìn)位值把低位字的進(jìn)位計(jì)入高位字。
?????? OV位表示溢出。溢出位是用來表示帶符號數(shù)的運(yùn)算結(jié)果超出有限字長的表示范圍的標(biāo)志。它是根據(jù)兩個(gè)操作數(shù)的符號及其變化來設(shè)置的。如兩個(gè)操作數(shù)符號相同而運(yùn)算結(jié)果的符號與之相反時(shí)OV=1,反之,OV=0。
?????? 例題1:無符號數(shù)和帶符號數(shù)均不溢出
| ? | 按無符號數(shù)對待 | 按帶符號數(shù)對待 |
| 0000 0100 | 4 | (+) 4 |
| +???? 0000 1011 | ?????+? 11 | ????+?? (+)11 |
| 0000 1111 | 15 | (+)15 |
?????? 例題2:無符號數(shù)溢出的情況
| ? | 按無符號數(shù)對待 | 按帶符號數(shù)對待 |
| 0000 0111 | 7 | (+)7 |
| +? 1111 1011 | ?????+? 251 | ????+?? (-)5 |
| 1Cy?0000 0010 | 258 | (+)2 |
| ? | Cy = 1 | OV =0 |
?????? 注:在字長為8位的情況下,258表示的也是2,所以結(jié)果均為2。
?????? 例題3:帶符號數(shù)溢出的情況
| ? | 按無符號數(shù)對待 | 按帶符號數(shù)對待 |
| 0000 1001 | 9 | (+)9 |
| +? 0111 1100 | ?????+? 124 | ????+?? (+)124 |
| ? 1000 0101 | 133 | (+)133 |
| ? | Cy =0 | OV = 1 |
?????? 例題3:帶符號數(shù)和無符號數(shù)均溢出的情況
| ? | 按無符號數(shù)對待 | 按帶符號數(shù)對待 |
| 1000 0111 | 135 | (-)121 |
| +? 1111 0101 | ?????+? 245 | ????+?? (-)11 |
| ? 1Cy?0111 1100 | 380 | (-)132 |
| | Cy =1 | OV = 1 |
???????結(jié)論:兩個(gè)同符號數(shù)相加,才可能產(chǎn)生溢出。兩個(gè)符號相異的數(shù)相加不可能產(chǎn)生溢出。計(jì)算機(jī)對進(jìn)位位的判斷規(guī)則為:兩個(gè)帶符號數(shù)進(jìn)行補(bǔ)碼加減運(yùn)算時(shí),通常用符號位產(chǎn)生的進(jìn)位(S代表)與最高有效數(shù)值位向符號位產(chǎn)生的進(jìn)位(Cy代表)進(jìn)行異或操作,若異或結(jié)果為1則發(fā)生溢出,反之則無溢出發(fā)生。OV = S + Cy 。以8位二進(jìn)制為例,OV = Cy7?+ Cy6?。
?????? 例題4:十六位數(shù)舉例。
| 0100 0110 0101 0010 | → | 4652 |
| +? 1111 0000 1111 0000 | → | ?+?? F0F0 |
| ? 1Cy?0011 0111 0100 0010 | ? | 3742 |
| ? | Cy =1?? OV = 0 | |
| 1111 0011 0110 0101 | → | F365 |
| +? 1110 0000 0010 0100 | → | ?+?? E024 |
| ? 1Cy?1101 0011 1000 1001 | ? | 3742 |
| ? | Cy =0?? OV = 0 | |
?????? 例題5??8位數(shù)舉例。
| 0111 1000 | → | 120 |
| +? 0110 0100 | → | ? +? 100 |
| ?? 1101 1100 | ? | 220 |
| 1000 1000 | → | 136 |
| +? 1001 1100 | → | ?+?? 156 |
| ? 1Cy?0010 0100 | ? | 292(36) |
總結(jié):無符號數(shù)? Cy =0?OV = 0
?????? ? 帶符號數(shù)? Cy7?=0? Cy6?= 1 ?OV = 1
?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
所謂符號擴(kuò)展問題是指一個(gè)數(shù)從位數(shù)較少擴(kuò)展到位數(shù)較多(如從8位擴(kuò)展到16位,或從16位擴(kuò)展到32位)時(shí)應(yīng)該注意的問題。
?
有符號數(shù)是用最高位是0或1來標(biāo)記正負(fù)的,如果最高位是0(如8位數(shù)中的第7位,從0位開始算的)表示正數(shù),而是1表示負(fù)數(shù)。16位數(shù)中的第15位控制符號。符號數(shù)擴(kuò)展實(shí)稱為帶符號擴(kuò)展。只是位數(shù)的擴(kuò)展,不能改變原值的!
如0000 1101這個(gè)數(shù)是帶符號數(shù)為13,擴(kuò)展為16位時(shí),一個(gè)16位數(shù)也要是13的!而這個(gè)數(shù)是0000 0000 0000 1101就可以了!所以正數(shù)的帶符號擴(kuò)展前邊是加0,這只是一個(gè)規(guī)律而不是本質(zhì),本質(zhì)就是數(shù)大小不改變!而10001101帶符號數(shù)不是-13的!而是將其取補(bǔ)加1就是負(fù)數(shù)結(jié)果,即-0111 0010 + 1,結(jié)果就是-115,如果將這個(gè)帶符號數(shù)擴(kuò)展時(shí),只有16位1111 1111 1000 1101才是-115,擴(kuò)展只是表示范圍大了,而不是改變數(shù)值的。如果是正數(shù)前8位是0,如果是負(fù)數(shù),前8位是1,這樣才是帶符號擴(kuò)展的。這不是本質(zhì),只是一個(gè)規(guī)律而已!
在匯編語言中,我們經(jīng)常要對字/字節(jié)的數(shù)據(jù)進(jìn)行操作。當(dāng)把“字節(jié)”轉(zhuǎn)換成“字”,或“字”轉(zhuǎn)換成“雙字”時(shí),就需要進(jìn)行符號擴(kuò)展。符號擴(kuò)展的具體操作就是把已知信息的最高位擴(kuò)展到所有更高位。
例1.1 把8位補(bǔ)碼0101 1010、10101100分別擴(kuò)展成16位補(bǔ)碼。
解:根據(jù)符號擴(kuò)展的含義,“字節(jié)→字”的具體擴(kuò)展結(jié)果如下:
| ? | 0101 1010 | ? | 1010 1100 |
| 0000 0000 | 0101 1010 | 1111 1111 | 1010 1100 |
例1.2 把16位補(bǔ)碼0101101111001010、1010111101011011別擴(kuò)展成32位補(bǔ)碼。
解:根據(jù)符號擴(kuò)展的含義,“字→雙字”的具體擴(kuò)展結(jié)果如下:
| ? | 0101 1011 1100 1010 | ? | 1010 1111 0101 1011 |
| 0000 0000 0000 0000 | 0101 1011 1100 1010 | 1111 1111 1111 1111 | 1010 1111 0101 1011 |
?
?
對于用補(bǔ)碼表示的數(shù),正數(shù)的符號擴(kuò)展應(yīng)該在前面補(bǔ)0,而負(fù)數(shù)的符號擴(kuò)展則應(yīng)該在前面補(bǔ)1。例如,機(jī)器字長為8位時(shí),[+46]補(bǔ)=00101110,[-46]補(bǔ)=1101 0010;如果把它們從8位擴(kuò)展到16位,則[+46]補(bǔ)=00000000 0010 1110=002EH,[-46]補(bǔ)=11111111 1101 0010=FFD2H
轉(zhuǎn)載于:https://www.cnblogs.com/liaomin416100569/p/9331278.html
總結(jié)
- 上一篇: hdu 5207
- 下一篇: (011)XHTML文档之列表