小古銀的官方網站(完整教程):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
的補碼是11110110
。get
以十進制的10
和-6
而且固定二進制位爲8位做爲例子:入門
上面兩個數值的原碼分別是00001010
和10000110
,若是這兩個二進制相加,按照加法運算的結果是10010000
,轉換爲十進制就是-16
,答案不正確。變量
上面兩個數值的補碼分別是00001010
和11111010
,若是這兩個二進制相加,按照加法運算的結果是00000100
,轉換爲十進制就是4
,答案正確。二進制
若是用原碼來表示數值,那麼在運算過程當中須要作一些處理才能計算出正確結果,若是用補碼錶示數據就不須要再處理,能夠直接運算。所以爲了使運算更加方便,計算機保存和處理數值都用補碼。數據
只須要對補碼再進行補碼操做便可。例如例如固定二進制8位,十進制10
的補碼是00001010
,補碼再補碼是00001010
;而十進制-10
的補碼是11110110
,補碼再補碼是10001010
,也就是-10
的原碼。
對於unsigned int
和int
,它們都是用二進制32位空間來保存數據的,一個表示的是無符號的數值,另外一個表示的是有符號的數值。假若有一個二進制數據0b1111'1111'1111'1111'1111'1111'1111'1111
,若是這個數值用unsigned int
表示就是unsigned int
的最大值;而若是這個數值用int
表示就是-1
。因此就有一個很神奇的現象就是unsigned int value = -1;
,當輸出變量value
的時候,顯示的就是unsigned int
的最大值。
+9
的補碼。-5
的補碼。+0
和-0
的補碼。11111001
,求原碼。