1. 程式人生 > >帶符號 數值基本類型存儲

帶符號 數值基本類型存儲

正數 log sum spa font http 第一個 sans bsp

一. 基本原則

在計算機系統中,數值一律用補碼來存儲,使用補碼的主要原因是,可以將符號位和其它位統一處理,並且減法也可按加法來處理

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

帶符號 數值基本類型存儲