什么是原码、反码和补码?
什么是原碼、反碼、補(bǔ)碼?
計(jì)算機(jī)中的符號數(shù)有三種表示方法,即原碼、反碼和補(bǔ)碼。三種表示方法均有符號位和數(shù)值位兩部分,符號位都是用0表示“正”,用1表示“負(fù)”,而數(shù)值位,三種表示方法各不相同。
原碼:
在數(shù)值前直接加一符號位的表示法。
例如-7的原碼是10000111
反碼:
正數(shù)的反碼與其原碼相同;
負(fù)數(shù)的反碼是對其原碼逐位取反,但符號位除外。
例如-7的反碼是11111000
補(bǔ)碼:
正數(shù)和+0的補(bǔ)碼是其原碼,負(fù)數(shù)則先計(jì)算其反碼,然后反碼加上1,得到補(bǔ)碼
##########################分界線##################################為什么要提出補(bǔ)碼呢?
我查閱了一些材料,得到如下總結(jié):
最原先最簡單的是原碼,但是因?yàn)樵a存在一個(gè)運(yùn)算的問題:
| 1 | 0000 0001 |
| -1 | 1000 0001 |
| 加法結(jié)果 | 1000 0001 |
| 十進(jìn)制結(jié)果 | -2 |
這樣最基礎(chǔ)的運(yùn)算如果按照計(jì)算機(jī)邏輯則會出錯(cuò),即
原碼是有符號數(shù)的最簡單的編碼方式,便于輸入輸出,但作為代碼加減運(yùn)算時(shí)較為復(fù)雜,故計(jì)算機(jī)一般不采用這種編碼方式存儲符號數(shù)。
于是提出了反碼,但是反碼出現(xiàn)了另一個(gè)問題:
計(jì)算結(jié)果會出現(xiàn)1000 0000(-0)這樣的存在,于是會出現(xiàn)二進(jìn)制與十進(jìn)制的互換不再是一一對應(yīng)的關(guān)系這樣的問題,增加計(jì)算難度,故也被拋棄。
隨后提出了基于反碼的-0問題而誕生的補(bǔ)碼,專門用來解決-0的問題。
補(bǔ)碼換算為原碼的過程中,如果補(bǔ)碼是正數(shù)或者+0的補(bǔ)碼,則其原碼就是補(bǔ)碼本身;如果補(bǔ)碼是負(fù)數(shù)或者-0的補(bǔ)碼,則其原碼的計(jì)算方法是,先將補(bǔ)碼減掉1,得到反碼,再將反碼取反,得到原碼。
總結(jié)
以上是生活随笔為你收集整理的什么是原码、反码和补码?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于位运算的错误问题
- 下一篇: 关于将一个数输出为原码、反码和补码的解惑