C語言中的基本資料型別(二)

2021-09-24 09:02:34 字數 2171 閱讀 5123

在上面的**當中,我們開始逐個分析。(**在第一篇)

a 的值就是100,存到計算機當中是0110 0100,b的值是200,存到計算機當中是1100 1000。因為a和b都是有符號的char型別,所以我們可以知道,實際上在記憶體當中,a代表的就是100,但是b的值實際上會是-56。這裡我們需要區分c的值和a+b值的差別,並且要明白char型別是如何提公升成int型別的。

在cpu當中,計算a+b時候,實際上是會建立乙個臨時量。這個臨時量是乙個int型別的資料。也就是在cpu中占有4個位元組。首先把a的值放給臨時量,然後把b累加上去。累加後的值會重新賦值給c。但是因為臨時量是int型別,但是c是char型別。所以會從int當中擷取權位低的乙個位元組放到char當中,完成整個賦值。

我們需要注意,凡是由內建型別產生的臨時空間,都具有常性。(值不可改變),這也就是 a+b=c並不成立的原因。

下面我們說一下資料型別的提公升。小位元組到大位元組的擴充套件當中,與自身型別有關,假如自身是有符號型別。符號是0/1,則擴充套件0/1。如果是無型別的,則拓展0。

我們看這樣的一段**:

#include

intmain()

所以通過這個賦值過程我們可以得知。a+b產生臨時量的值就是

0000 0000 0000 0000 0000 0000 0110 0100 +1111 1111 1111 1111 1111 1111 1100 1000

=0000 0000 0000 0000 0000 0000 0010 1100 -----------》轉換成十進位制也就是44。實際上進製1,被丟棄。

c的值就是 0010 1100 ---------------》轉換成十進位制同樣是44。所以第乙個列印結果是兩個44。

但是在第二段**當中,x,y, z都是無符號型別。所以我們不用區分最高位的符號位。也就是說,在記憶體當中,a的值就是0110 0100,b的值為1100 1000。同上分析過程可知。

x+y產生的臨時量的值是

0000 0000 0000 0000 0000 0000 0110 0100 +0000 0000 0000 0000 0000 0000 1100 1000

=0000 0000 0000 0000 0000 0001 0010 1100 -----------》轉換成十進位制也就是300。

z的值為0010 1000----------》轉換為十進位制也就是44。

所以執行結果是這樣看似奇怪的結果。實際上包含了計算機更底層的一些實現功能。

學習完畢上面**,我們來看這樣乙個**

#include

intmain()

**執行結果如下圖所示:

這樣的結果恰好可以證明我們關於資料型別提公升的那個問題。也就是我們剛才說的進製1但是被捨棄了。實際上這是兩個不同的概念。

下面一段**同樣可以證明這個結果。

#include

intmain()

執行圖如下:

-128這個數值我們應該相當的熟悉了。當1000 0000 提公升資料型別是,因為本身是乙個有符號的char型別所以會提公升為 1111 1111 1111 1111 1111 1111 1000 0000。對應十進位制也就是上面的數值。

最後我們再看這樣一道題目:

#include

intmain()

學習完上面,我們可以自主完成這個題目。

模擬我們對於char型別的整個分析過程,很容易明白剩餘幾個資料型別的特點碼,分析過程如出一轍。下來我們強調一下bool型別。

bool 型別在c語言中占有乙個位元組,也就是八個位元位置。但是實際上bool只使用了乙個位元位置。在bool變數當中我們需要知道,0為假,剩餘的所有都為真的。如下**:

#include

intmain()

可以證明,實際編譯器看到這些數值以後,會把0和1存到布林變數當中,最終存入的只有0和1。

C語言中的基本資料型別

寫在前面 剛學習c語言,想通過寫部落格的方式來鞏固和加強自己對於c語言的理解,希望可以獲得一些大佬的指點。在vs2010編譯器下 資料型別 資料型別符 占用位元組數 數值範圍 整型int 4 2147483648 2147483647 231 231 1 短整型short 2 32768 32767...

C語言基本資料型別

2.各種資料型別介紹 2.1整型 整形包括短整型 整形和長整形。2.1.1短整形 short a 1 2.1.2整形 一般佔4個位元組 32位 最高位代表符號,0表示正數,1表示負數,取值範圍是 2147483648 2147483647,在記憶體中的儲存順序是地位在前 高位在後,例如0x12345...

C語言基本資料型別

1.資料型別可以理解為固定記憶體大小的別名 c語言誕生之前的彙編時代,在低端的機器語言裡面沒有資料型別的概念,如何操作記憶體呢?當然我們知道記憶體的起始位址和記憶體大小,就可以操作這段記憶體了。然而在程式設計過程中,我們發現經常用到1個位元組,2個位元組和4個位元組的記憶體。我們每次呢都會去記這個2...