關於整型在記憶體中的資料儲存的方式

2021-10-18 16:39:12 字數 2093 閱讀 5079

計算機中的整型有符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位三種表示方法各不相同。

原碼: 直接將數值按照正負數的形式翻譯成二進位制就是這個數的原碼

反碼:將原碼的符號位不變,其他位依次按位取反就可以得到了反碼.

補碼:反碼+1就得到補碼

舉個例子

int a =

20;//4個位元組-32bit(正數原反補相同)

0000

0000

0000

0000

0000

0000

0001

0100(原碼)

0000

0000

0000

0000

0000

0000

0001

0100(反碼)

0000

0000

0000

0000

0000

0000

0001

0100(補碼)

int b =

-10;//4個位元組-32bit(負數原反補不同)

1000

0000

0000

0000

0000

0000

0000

1010(原碼)

1111

1111

1111

1111

1111

1111

1111

0101(反碼)

1111

1111

1111

1111

1111

1111

1111

0110(反碼+

1得到補碼)

上面我們可以看到,正數的原反補碼都是一樣的,只有負數的原反補不同,因此我們可以知道

有符號數:

正數:原碼、反碼、補碼相同

負數:原碼、反碼、補碼不同

無符號數:原碼、反碼、補碼相同(無符號數全是正數)

我們開啟編譯器的記憶體視窗,可以看到,整型b變數的位址對應的資料是b變數的反碼對應的十六進製制

由此可知,整型在記憶體中資料是以補碼的形式儲存的。

在計算機系統中,數值一律用補碼來表示和儲存.原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理(cpu只有加法器)此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。

cpu中只有加法器那減乘除是怎麼算的呢?

舉個例子,比如1-1我們可以寫成1+(-1)然後用補碼計算

00000000000000000000000000000001(1的補碼)

11111111111111111111111111111111(-

1的補碼)

100000000000000000000000000000000(由於整型只能存32位)

00000000000000000000000000000000(丟棄過後得到的值就是為0)

我們先來看張圖

我們發現,在記憶體中儲存的順序是反的,而這裡我們要了解乙個新知識「大小端」。

大小端描述的是資料在記憶體中位元組的順序

大端(儲存)模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中;(另一種叫法:大端位元組序)

在大端模式下,資料的位元組序順序是以低位高位址,高位低位址的方式排序的

而在小端模式下,資料的位元組序順序是以低位低位址,高位高位址的方式排序的

整型資料在記憶體中如何儲存

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!以下討論,針對32位的計算機系統。問 int型資料佔幾個位元組?答 4位元組。地球上這個群體的人都知道。再問 這4個位元組,即32個二進位制位,又是何儲存?這就進入計算機的 底層 了。這個事情,學習程式設計的童鞋,可以懂。儲存的方式,和我們拍腦袋想...

整型在記憶體中的儲存(原碼 反碼 補碼)

我們談談資料在所開闢記憶體中到底是如何儲存的?比如 int a 20 int b 10 我們知道 a 分配四個位元組的空間。那如何儲存?下面讓我們看三個概念 符號位都是用0表示 正 用1表示 負 原碼 直接將二進位制按照正負數的形式翻譯成二進位制就可以。反碼 將原碼符號位不變,其他位按位取反就可以得...

資料在記憶體中的儲存

身為乙個天天處理資料的人,不得不說資料在記憶體中的儲存是必須要知道的問題。首先,資料在記憶體中的儲存涉及到作用域,儲存位置等方面的問題。根據資料的作用域,可將資料劃分為區域性變數和全域性變數 區域性變數的作用域為從定義開始到函式執行結束 全域性變數的作用域從程式開始到程式結束。計算機的記憶體分配可以...