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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

原码、补码、反码详解

發布時間:2025/3/19 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原码、补码、反码详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

原碼、補碼、反碼詳解:LUKE 2017-11-13

1.原碼:(True Form)*****************************************
?? ?是對計算機中的數字進行定點表示。最高位是符號位,其余為表示數值位。
注:
?? ?計算機中所有的數均用0,1編碼表示,數字的正負號也不例外,如果一個機器數字長是n位的話,
?? ?約定最左邊一位用作符號位,其余n-1位用于表示數值。
?? ?在符號位上用"0"表示正數;用"1"表示負數。數值位表示真值的絕對值。凡不足n-1位的,小數在
?? ?最低位右邊加零;整數則在最高位左邊加零以補足n-1位。這種計算機的編碼形式叫做原碼。

原碼的優缺點:
?? ?優點:
?? ??? ?簡單直觀;例如,我們用8位二進制表示一個數,+11的原碼為00001011,-11的原碼就是10001011
?? ?缺點:
?? ??? ?原碼不能直接參加運算,可能會出錯。
?? ??? ?例如數學上,1+(-1)=0,而在二進制中原碼00000001+10000001=10000010,換算成十進制為-2。
?? ??? ?顯然出錯了。所以原碼的符號位不能直接參與運算,必須和其他位分開,這就增加了硬件的開銷和復雜性

2.補碼:*****************************************

注:在計算機系統中,數值一律用補碼來表示和存儲。原因在于,使用補碼,可以將符號位和數值域統一處理;
?? ?同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬件電路。

特點:
?? ?1、一個負整數(或原碼)與其補數(或補碼)相加,和為模。
?? ?2、對一個整數的補碼再求補碼,等于該整數自身。
?? ?3、補碼的正零與負零表示方法相同。

補碼和原碼的相互轉換:
?? ?補碼 -> 原碼:
?? ??? ??? ??? ?⑴如果補碼的符號位為“0”,表示是一個正數,其原碼就是補碼。
?? ??? ??? ??? ?⑵如果補碼的符號位為“1”,表示是一個負數,那么求給定的這個補碼的補碼就是要求的原碼。
?? ??? ??? ??? ??? ?(最高符號位不變,數值位取反,再加1就是原碼。)
?? ?原碼 -> 補碼:
?? ??? ??? ??? ?⑴如果原碼的符號位為“0”,表示是一個正數,其補碼就是原碼。
?? ??? ??? ??? ?⑵如果原碼的符號位為“1”,表示是一個負數,就是原碼先減1,符號位不變,再數值位取反就是補碼。

舉例:-7 : 1000 0111(原碼)
?? ??? ? ? 減1
?? ??? ? ? 1000 0110
?? ??? ? ? 符號位不變,再數值位取反
?? ??? ? ? 1111 1001(補碼)
?? ??? ? ??
?? ??? ? ? 1111 1001(補碼)
?? ??? ? ? 取反,
?? ??? ? ? 1000 0110
?? ??? ? ? 符號位不變,加1
?? ??? ? ? 1000 0111(原碼)
?? ? ?
?? ? ?-1.1 :1000 0001.0000 0001(原碼)
?? ??? ??? ??? ?減1
?? ??? ??? ? 1000 0001.0000 0000
?? ??? ??? ??? ?符號位不變,再數值位取反
?? ??? ??? ? 1111 1110.1111 1111(補碼)
?? ??? ??? ??
?? ??? ??? ? 1111 1110.1111 1111(補碼)
?? ??? ??? ??? ?符號位不變,再數值位取反
?? ??? ??? ? 1000 0001.0000 0000
?? ??? ??? ??? ?加1
?? ??? ??? ? 1000 0001.0000 0001

(提示:代碼中的小數點”.”是在書寫時為了清晰起見加上去的,在機器中并不出現。)
(******提示:小數補碼的簡單計算方式:符號位保持不變,從右邊起第一個1以及1右邊的0保持不變,左邊的數值位按位取反。)
?? ??? ?
補碼的絕對值:
?? ?負數的補碼的絕對值計算:只要對補碼全部取反并加1,就可得到其數值。
?? ?舉例:-65 = 1*2^6+1*2^0
?? ??? ??? ??? ?1100 0001(原碼)
?? ??? ??? ??? ?減1
?? ??? ??? ??? ?1100 0000
?? ??? ??? ??? ?符號位不變,數值位取反
?? ??? ??? ??? ?1011 1111(補碼)
?? ??? ??? ?取絕對值:全部取反
?? ??? ??? ??? ?0100 0000
?? ??? ??? ??? ?加1
?? ??? ??? ??? ?0100 0001(結果為:+65的補碼)


補碼的加減法(略,簡單)

補碼的乘法:
?? ?(等比數列求和公式)
?? ??? ?a1 a2 a3...an
?? ??? ?q = an / a(n-1)
?? ??? ?an = a1 * q^(n-1)
?? ??? ?Sn = a1 + a2 + ... + an = a1 * (1 - qn) / (1 - q) = (a1 - an * q) / (1 - q)

3.反碼:*****************************************

?? ?反碼是數值存儲的一種,多應用于系統環境設置,如linux平臺的目錄和文件的默認權限的設置umask,
?? ?就是使用反碼原理。在計算機內,定點數有3種表示法:原碼、反碼和補碼。

?? ?所謂原碼就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。
?? ?
?? ?反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
?

轉載于:https://my.oschina.net/u/2607324/blog/1573217

總結

以上是生活随笔為你收集整理的原码、补码、反码详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。