為什麼要引入補碼

2021-07-04 16:35:03 字數 1196 閱讀 6866

現在我們知道了計算機可以有三種編碼方式表示乙個數. 對於正數因為三種編碼方式的結果都相同, 所以不需要過多解釋

原碼:[+1]0000 0001

反碼:[+1]0000 0001

補碼:[+1]0000 0001

為了解決原碼做減法的問題, 出現了反碼:

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原

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

= [1111 1111]反

= [1000 0000]原 (1111 1111,符號位不變,其他為逐位取反)

= -0

於是補碼的出現, 解決了0的符號以及兩個編碼的問題:

1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原

= [0000 0001]補 + [1111 1111]補

= [0000 0000]補

= [0000 0000]原

單位元組的表示的最大的負數是多少?```[10000000]補=[10000000]反+1=11111111+1=(1)00000000=00000000(最高位溢位了,符號位變成了0)

有人會問 10000000這個補碼表示的哪個數的補碼呢? 其實這是乙個規定,這個數表示的是-128 所以n位補碼能表示的範圍是 -2^(n-1)到2^(n-1)-1 比n位原碼能表示的數多乙個

- 所以得出整型數的數值範圍:
int number1 = 0b10000000000000000000000000000000;

int number2 = 0b01111111111111111111111111111111;

int number3 = 0b11111111111111111111111111111111;

printf("number1 = %d\n", number1);

printf("number2 = %d\n", number2);

printf("number3 = %d\n", number3);

輸出結果:number1 = -2147483648number2 = 2147483647number3 = -1

為什麼要引入註解

使用annotation之前 甚至在使用之後 xml被廣泛的應用於描述元資料。不知何時開始一些應用開發人員和架構師發現xml的維護越來越糟糕了。他們希望使用一些和 緊耦合的東西,而不是像xml那樣和 是松耦合的 在某些情況下甚至是完全分離的 描述。如果你在google中搜尋 xml vs.annot...

為什麼要引入保護成員

在c 成員中我們需要一種成員比私有成員訪問範圍大比公有成員訪問範圍小的成員。因此就引入了保護成員。保護成員擴大範圍表現在基類的保護成員在派生類的成員函式中被訪問。基類的成員本身就是派生類的成員,但是出於隱藏目的不宜設為公有,但是又確實需要在派生類的成員函式中經常訪問基類成員,將其設定成保護成員,既能...

什麼是OBD?為什麼要引入OBD?

obd open bufferdefinition 檔案是一種簡化的介面定義語言,用於描述 open broker 中介軟體介面的資料型別和 open boss 後台服務相互呼叫的資料型別,並盡量簡化和規範應用中資料型別的寫法,使程式更集中於解決業務邏輯。obd檔案不能直接使用到程式設計中,工具ob...