C語言修煉之路數據類型悟正法 解析存儲定風魔上篇

(壹) 數據類型介紹

前面我們已經學習瞭基本的內置類型,以及他們所占存儲空間的大小。:

類型的意義: 

  • 使用這個類型開辟內存空間的大小(大小決定瞭使用范圍)。
  • 如何看待內存空間的視角。

1.1  類型的基本歸類

整形傢族:

浮點數傢族:

 構造類型:

 指針類型

空類型: 

(貳)整形在內存中的存儲

我們之前講過一個變量的創建是要在內存中開辟空間的。

空間的大小是根據不同的類型而決定的。

那接下來我們談談數據在所開辟內存中到底是如何存儲的?

比如:

我們知道為a分配四個字節的空間。 那如何存儲? 

2.1  原碼、反碼、補碼

計算機中的有符號數(整數)有三種表示方法,即原碼、反碼和補碼。

三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位三種表示方法各不相同。

2.2  深入解析

正數的原、反、補碼都相同。

對於整形來說:數據存放內存中其實存放的是補碼。 

為什麼呢?

舉例解析1:

舉例解析2

瞭解一下計算機的底層概念,我們人腦可以很輕松的知道機器數的第一位是符號位,但對於計算機基礎電路設計來說判別第一位是符號位是非常難和復雜的事情,為瞭讓計算機底層設計更加簡單,人們開始探索將符號位參與運算,並且采用隻保留加法的方法,我們知道減去一個數,等於加上這個數的負數,即:1-1 = 1 + (-1) = 0,這樣讓計算機運算就更加簡單瞭,並且也讓符號位參與到運算中去。

因為補碼能多存儲一個-128,而且在計算機底層中存儲的是補碼,所以在計算機中一個8位的二進制數的存儲范圍是用補碼表示的[-128,127],而不是用原碼或反碼表示的[-127,127]。這也可以解釋為什麼計算機中一個字節的取值范圍是[-128,127]。

這樣也能夠回答我們開始提出的問題瞭,原碼、反碼、補碼的使用,是人們為瞭讓符號位能參與運算並讓計算機底層運算更加簡單而設計出來的數據存儲表示方式。

到此這篇關於C語言修煉之路數據類型悟正法 解析存儲定風魔上篇的文章就介紹到這瞭,更多相關C語言 數據類型內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: