一. 基本原則spa
在計算機系統中,數值一概用補碼來存儲,使用補碼的主要緣由是,能夠將符號位和其它位統一處理,而且減法也可按加法來處理3d
1. 首位(最高位)是符號位,0表示正數,1表示負數,後邊的剩餘位數用來存儲數值;blog
2. 正數的補碼與源碼相同(正數源碼,反碼,補碼都是相同的);內存
3. 負數的補碼是反碼加1(反碼是對源碼的數值位逐位取反,首位符號位除外);源碼
4. 兩個用補碼錶示的數相加時,若是最高位(符號位)有進位,則進位被捨棄。im
二. 下邊以int爲例,看下補碼究竟是什麼邏輯d3
1. int number = -1; 負數,首位符號位爲1db
即int number = -1;在內存中存儲爲 1111 1111 1111 1111 1111 1111 1111 1111img
2. 兩個數相加計算機
int number1 = -1;
int number2 = 2;
int sum = number1 + number2; //sum = 1
number1和number2逐位相加,最高位有進位1,按照基本原則4(兩個補碼相加,符號位有進位,將進位直接扔掉)獲得sum在內存中爲0000 0000 0000 0000 0000 0000 0000 0001,轉爲十進制即爲1
3. 兩個數相減(實質是第一個數加上第二個數對應的負數)
int num1 = 5;
int num2 = 6;
int sub = num1 + (-num2); //sub = -1
獲得sub在內存中爲1111 1111 1111 1111 1111 1111 1111 1111,首位爲1,說明sub是負數,根據基本規則3反推,減1而後數值位逐位取反便可獲得源碼
源碼爲 1000 0000 0000 0000 0000 0000 0000 0001,轉爲十進制爲-1