日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

复习一个知识点——原、反、补码以及取反操作

發(fā)布時間:2025/5/22 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 复习一个知识点——原、反、补码以及取反操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、相關(guān)概念

1.1 ?機(jī)器數(shù)與真值

  ·機(jī)器數(shù) ?計算機(jī)中存儲的數(shù)據(jù)都是帶符號的二進(jìn)制數(shù),例如:5?→ 0000 0101 , -5 → 1000 0101 ?此類數(shù)值稱之為機(jī)器數(shù)。

  ·真值  ?為區(qū)別起見,將帶符號位的機(jī)器數(shù)對應(yīng)的真正數(shù)值稱為機(jī)器數(shù)的真值。如:1000 0101的形式值為133,但它實際表示的值為-5,-5稱之為真值。

1.2 ?原、反、補(bǔ)碼

  ·原碼 ?符號位加上真值的絕對值。如+5和-5的原碼分別為:0000 0101和1000 0101

  ·反碼 ?正數(shù)的反碼是它本身,負(fù)數(shù)的反碼是將它原碼的符號位不變,其余各位按位取反。? 如+5和-5的反碼分別為:0000 0101和1111 1010

  ·補(bǔ)碼 ?正數(shù)的補(bǔ)碼是它本身,負(fù)數(shù)的補(bǔ)碼是將它原碼的符號位不變,其余各位按位取反再加1(其實就是反碼+1)。如+5和-5分補(bǔ)碼分別為:0000 0101和1111 1011

?

二、為何要用原、反、補(bǔ)碼

2.1 ?符號位的問題

  我們已知正數(shù)的原、反、補(bǔ)碼都是相同的,但對于負(fù)數(shù)來說確是完全不同。在處理加減乘除等運(yùn)算時,若是人腦來進(jìn)行,我們可以將符號位抽象出來然后直接操作真值即可。但若交由計算機(jī)完成,若還需提前去識別符號位,則會大大增加計算機(jī)基礎(chǔ)電路的復(fù)雜度,故需要考慮帶著符號位進(jìn)行計算。

考慮一個1-1的問題:

·原碼計算:1-1 = 1+(-1)= [0000 0001]原 + [1000 0001]原 = [1000 0010]原 =-2? ?結(jié)果顯然不對

·反碼計算:1-1 = 1+(-1)

       ?=?[0000 0001]原 + [1000 0001]原

       ?=?[0000 0001]反 + [1111 1110]反

       ?= [1111 1111]反

       ?= [1000 0000]原 = -0

  從結(jié)果來看,真值部分是對的,但0前面出現(xiàn)負(fù)號是無意義的。反而會引入1000 0000的機(jī)器碼表示數(shù)值0,從而與0000 0000表示的0引起沖突,故而補(bǔ)碼碼應(yīng)運(yùn)而生。

·補(bǔ)碼計算:1-1 = 1+(-1)

       ?=?[0000 0001]原 + [1000 0001]原

       ?=?[0000 0001]補(bǔ) + [1111 1111]補(bǔ)

       ?= [0000 0000]補(bǔ)

       ?= [0000 0000]原 = 0

  可見,使用補(bǔ)碼運(yùn)算解決了符號位帶入的問題和0的符號問題。值得注意的是,在補(bǔ)碼的運(yùn)算結(jié)果中,[1000 0000]補(bǔ) 代表的數(shù)值為-128,但由于該補(bǔ)碼使用的是之前-0的原碼,故-128是沒有原碼和反碼表示的。有此也可以引申出,8位二進(jìn)制值的原碼或反碼的表示范圍為[-127,127],而補(bǔ)碼的則為[-128,127]。

2.2 ?總結(jié)

  ·數(shù)字電路的CPU中僅實現(xiàn)了加法器,為實現(xiàn)減法器,減法都是通過轉(zhuǎn)換為加法進(jìn)行計算的。

  ·負(fù)數(shù)在計算機(jī)中是以補(bǔ)碼的形式存儲的,計算過程也是用補(bǔ)碼實現(xiàn)的。

?

三、反碼與取反

?

  初學(xué)時容易將兩個概念混淆,前面已經(jīng)提到,計算機(jī)中數(shù)據(jù)的存儲和計算都是以補(bǔ)碼的形式進(jìn)行的。故取反這一過程也是圍繞補(bǔ)碼展開的,與反碼這一概念并無關(guān)系。

看一個+5和-5取反的過程:

  +5 = [0000 0101]原?→ [0000 0101]補(bǔ)?→按位取反→ [1111 1010]補(bǔ)?→ [1000 0110]原 = -6

  -5 = [1000 0101]原?→ [1111 1011]補(bǔ)?→按位取反→ [0000 0100]補(bǔ)?→ [0000 0100]原 = 4

可見,對一個數(shù)取反都是先求得該數(shù)的補(bǔ)碼,對補(bǔ)碼進(jìn)行按位取反,然后對結(jié)果再求補(bǔ)碼即可。快速計算方法:對數(shù)a取反,結(jié)果為-(a+1)。

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/jing-wen/p/9128699.html

總結(jié)

以上是生活随笔為你收集整理的复习一个知识点——原、反、补码以及取反操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。