正數的原碼,反碼,補碼都是一樣的。
負數的原碼用其絕對值的正數原碼表示,反碼在原碼基礎上求反,補碼在反碼的基礎上加1.
原碼:將一個整數,轉換成二進制,就是其原碼。 如單字節的5的原碼為:0000 0101;-5的原碼為1000 0101。 反碼:正數的反碼就是其原碼;負數的反碼是將原碼中,除符號位以外,每一位取反。 如單字節的5的反碼為:0000 0101;-5的反碼為1111 1010。 補碼:正數的補碼就是其原碼;負數的反碼+1就是補碼。 如單字節的5的補碼為:0000 0101;-5的原碼為1111 1011。 在計算機中,正數是直接用原碼表示的,如單字節5,在計算機中就表示為:0000 0101。 負數用補碼表示,如單字節-5,在計算機中表示為1111 1011。
單片機中處理: 先取反,再加1即可。
Uint8 num_a;
Int8 num_b = -120;
num_a = ~num_b + 1; // 獲得相應的正數
可以參考以下文章:
https://www.cnblogs.com/dingyingsi/p/6075967.html
https://www.cnblogs.com/hello-yz/p/3249175.html