C++入門教程(17):二進制和正負數

小古銀的官方網站(完整教程):http://www.xiaoguyin.com/
C++入門教程視頻:https://www.bilibili.com/vide...ide


前面已經講過二進制和整數的關係,如今再補充一下。咱們知道數據都是使用二進制保存和處理的,而二進制沒有正負的概念,那麼二進制是怎麼表示負數呢?如今就來說解這個問題。網站

結論

結論放在前面:計算機中全部的數值都是用補碼錶示的code

原碼

固定好二進制的位數以後,用最高位來表示數值的正負,最高位用0來表示正數,最高位用1來表示負數。例如固定二進制8位,十進制10的原碼是00001010,而十進制-10的原碼是10001010視頻

反碼

固定好二進制的位數以後,正數的反碼和原碼相同,負數的反碼就是除了符號位外的全部位上,1變0,0變1。例如例如固定二進制8位,十進制10的反碼是00001010,而十進制-10的反碼是11110101教程

補碼

固定好二進制的位數以後,正數的補碼和原碼相同,負數的補碼就是它的反碼+1。例如例如固定二進制8位,十進制10的補碼是00001010,而十進制-10的補碼是11110110get

使用補碼的緣由

以十進制的10-6而且固定二進制位爲8位做爲例子:入門

上面兩個數值的原碼分別是0000101010000110,若是這兩個二進制相加,按照加法運算的結果是10010000,轉換爲十進制就是-16,答案不正確。變量

上面兩個數值的補碼分別是0000101011111010,若是這兩個二進制相加,按照加法運算的結果是00000100,轉換爲十進制就是4,答案正確。二進制

若是用原碼來表示數值,那麼在運算過程當中須要作一些處理才能計算出正確結果,若是用補碼錶示數據就不須要再處理,能夠直接運算。所以爲了使運算更加方便,計算機保存和處理數值都用補碼。數據

補碼轉原碼

只須要對補碼再進行補碼操做便可。例如例如固定二進制8位,十進制10的補碼是00001010,補碼再補碼是00001010;而十進制-10的補碼是11110110,補碼再補碼是10001010,也就是-10的原碼。

正負數轉換

對於unsigned intint,它們都是用二進制32位空間來保存數據的,一個表示的是無符號的數值,另外一個表示的是有符號的數值。假若有一個二進制數據0b1111'1111'1111'1111'1111'1111'1111'1111,若是這個數值用unsigned int表示就是unsigned int的最大值;而若是這個數值用int表示就是-1。因此就有一個很神奇的現象就是unsigned int value = -1;,當輸出變量value的時候,顯示的就是unsigned int的最大值。

鞏固練習

  1. +9的補碼。
  2. -5的補碼。
  3. +0-0的補碼。
  4. 已知一個補碼爲11111001,求原碼。
相關文章
相關標籤/搜索