天天看點

c語言資料類型的存儲,c語言資料類型存儲值的範圍的計算

本人在學習過程中對資料類型的存儲範圍的概念非常模糊,特整理一下,不對的地方請評論指正。

我個人的了解:比如 int 類型資料 一般規定是2個位元組的長度,取值範圍是 無符号的 2的16次減1  有符号的是 -2的15次方 到 2的15次方-1. 這個取值範圍是怎麼來的呢?為什麼int的位元組數為2呢?這裡是我最不能明白的地方。通過查閱大量資料,最終通過總結了解得出以下結論。

先說一下第二個問題,為什麼int 的位元組數為2呢?

其實這個是由編譯系統定義的,是規定,至于為什麼這樣規定,就先不深揪了。

在來說一下第一個問題,int 的取值範圍

要明白這個問題,先得看看我的第一篇文章,基礎中的 位元組和位的關系,再來看這篇文章會更加明白。

首先,我們先做個小數值的例子

計算機隻能執行0和1,所有程式最終都會翻譯成0和1的代碼,位是計算機的最小資訊機關(也可以了解成存儲機關),

1個位能表示倆種狀态

0 1倆種狀态也就是2的1次方,十進制取值範圍就是0~1。

2個位就能表示4種狀态

00 01 10 11 四種狀态就是2的2次方,十進制取值範圍就是0~3。

3位就能表示8種種狀态

000 001 010  011 100 101 110 111  8種狀态,也就是2的3次方,十進制的取值範圍就是0~7。

通過以上例子可以得出 n 位能表示的狀态是2的n次方,其十進制取值範圍是0~2的n次方-1。

這是無符号的的,在說一個有符号的,

以三位來說明

000 001 010 011       100 101 110 111

第一位表示狀态也就是正負

他能表示8種狀态,就是-2的2次方~2的2次方減1.

其十進制取值範圍是-4~3啦。(這塊大家可能不明白,我也不是太懂,通過查資料負的二進制數轉換為十進制數的是後要取反加1的,000取反011加一之後是0100是-4啦 ,011取反是000加一就是001就是-1啦。100就是正的0,0不分正負,111就是正的3)

同樣的道理,倆個位元組,就是16位啦,

無符号最大值是0~2的16次方就是0~65535

有符号的就是-2的15次方~2的15次方減1。