帶符號 數值基本類型存儲
一. 基本原則
在計算機系統中,數值一律用補碼來存儲,使用補碼的主要原因是,可以將符號位和其它位統一處理,並且減法也可按加法來處理
1. 首位(最高位)是符號位,0表示正數,1表示負數,後邊的剩余位數用來存儲數值;
2. 正數的補碼與源碼相同;
3. 負數的補碼是對源碼的數值位逐位取反(首位符號位除外),然後加1;
4. 兩個用補碼表示的數相加時,如果最高位(符號位)有進位,則進位被舍棄。
二. 下邊以int為例,看下補碼到底是什麽邏輯
1. int number = -1; 負數,首位符號位為1
即int number = -1;在內存中存儲為 1111 1111 1111 1111 1111 1111 1111 1111
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
帶符號 數值基本類型存儲