标題整型變量的分類:
(注意:占幾個位元組跟作業系統和編譯器規定有關,可以在編譯器上調試檢視!)
1)基本型:類型說明符為int,在記憶體中占4個位元組
2)短整型:short int或short,所占位元組和取值範圍基本相同
3)長整型:long int或long,在記憶體中占4個記憶體
4)無符号型:為unsigned
在編譯器中輸出變量類型所占位元組數:
說明一下,這個程式我原本以為會運作得很順利,結果還是出了點小插曲。仔細檢查發現了,就是這個逗号用成了中文的形式,然後立馬改回來了,就輸出正确結果。事實證明,在VC++6.0中,int基本型在記憶體中占4個位元組。
當然也可以把sizeof()裡面的int替換成其他需要驗證的類型所占記憶體的位元組
整型變量的定義
變量定義的一般形式為“
類型說明符 變量名辨別符,變量名辨別符…;(一個分号表示一個語句結束)
舉比較常見的幾個例子:
int a,b,c;(定義為整型變量)
short x,y,z;(定義為短整型變量)
float m,n;(定義為浮點型變量)
在書寫變量定義時,需注意:
- 一個類型說明符後面可跟多個相同類型的變量,各變量名之間用;隔開。
- 最後一個變量名之後必須用;号結尾。
- 必須先定義變量才能使用,一般放在函數體的開頭部分。不定義的話,記憶體裡就不存在這個變量。當然無法使用它。
【例3.1】
#include<stdio.h>
void main()
{
int a,b,c,d;
unsigned u;
a = 12;
b = -24;
u = 10;
c = a + u; d= b+u;
printf(“a+u=%d,b+u=%d\n”,c,d);
}
因為使用到了printf輸出語句,是以我們開頭要用預處理語句stdio.h。在”“裡面的都是以字元的形式輸出,就是說你在字元串裡面寫什麼輸出的就是什麼,%d是形式輸出,每一個%對應後面的數,即第一個%d對應c,第二個%d對應d,c,d均以整型的形式輸出。
輸出的結果如圖所示:
當然我們這裡是以字母相加的形式輸出,我們也可以用%d對其進行替換,輸出數字相加的形式,當然後面對應%d的字母也要相應替換掉,否則會亂掉,以圖為鑒:
溢出
溢出呢,怎麼了解比較好一些呢?打個比方吧,我們來想一下一個水桶,水桶的容積是固定的,也就是說這個水桶能裝多少水是固定的,當我們往裡面放水,水的體積超過了水桶的容積的時候,超過水桶容積這部分的水就會溢出了。同樣的道理,我們的記憶體給一個類型的資料配置設定的空間是固定的,當存入的資料值大小超過這個存儲空間時,超出的這部分就自然而然地溢出了。
【例3.2】
#include <stdio.h>
void main()
{
int a,b;
a = 32767;
b = 1 + a;
printf("%d,%d\n",a,b);
}
運作出來的結果圖如下:
這段代碼的功能就是輸出a,b的數值。int在記憶體裡面占四個位元組。此時并沒有出現任何異常。但是當我們将int 改為short int 時,就變成如下情況:
這個時候就發生溢出了。為什麼呢?
因為啊,雖然是十六位,但是第一位是符号位,實際用來存儲的就隻有15位。我們來看一下:
32767:0111 1111 1111 1111
-32768: 1000 0000 0000 0000(負數的最大數)
當在程式中遇到不同類型的資料時,編譯器會進行自動轉換,分為兩種,一種是顯式轉換,另一種是隐式轉換。通常,編譯器進行的是的分類:
(注意:占幾個位元組跟作業系統和編譯器規定有關,可以在編譯器上調試檢視!)1)基本型:類型說明符為int,在記憶體中占4個位元組2)短整型:short int或short,所占位元組和取值範圍基本相同3)長整型:long int或long,在記憶體中占4個記憶體4)無符号型:為unsigned在編譯器中輸出變量類型所占位元組數:

說明一下,這個程式我原本以為會運作得很順利,結果還是出了點小插曲。仔細檢查發現了,就是這個逗号用成了中文的形式,然後立馬改回來了,就輸出正确結果。事實證明,在VC++6.0中,int基本型在記憶體中占4個位元組。當然也可以把sizeof()裡面的int替換成其他需要驗證的類型所占記憶體的位元組 ## 整型變量的定義變量定義的一般形式為“類型說明符 變量名辨別符,變量名辨別符…;(一個分号表示一個語句結束)舉比較常見的幾個例子:int a,b,c;(定義為整型變量)short x,y,z;(定義為短整型變量)float m,n;(定義為浮點型變量)在書寫變量定義時,需注意: - 一個類型說明符後面可跟多個相同類型的變量,各變量名之間用;隔開。 - 最後一個變量名之後必須用;号結尾。 - 必須先定義變量才能使用,一般放在函數體的開頭部分。不定義的話,記憶體裡就不存在這個變量。當然無法使用它。 【例3.1】> #include<stdio.h>void main(){ int a,b,c,d; unsigned u; a = 12; b = -24; u = 10; c = a + u; d= b+u; printf(“a+u=%d,b+u=%d\n”,c,d);}因為使用到了printf輸出語句,是以我們開頭要用預處理語句stdio.h。在”“裡面的都是以字元的形式輸出,就是說你在字元串裡面寫什麼輸出的就是什麼,%d是形式輸出,每一個%對應後面的數,即第一個%d對應c,第二個%d對應d,c,d均以整型的形式輸出。輸出的結果如圖所示:
當然我們這裡是以字母相加的形式輸出,我們也可以用%d對其進行替換,輸出數字相加的形式,當然後面對應%d的字母也要相應替換掉,否則會亂掉,以圖為鑒:
## 溢出溢出呢,怎麼了解比較好一些呢?打個比方吧,我們來想一下一個水桶,水桶的容積是固定的,也就是說這個水桶能裝多少水是固定的,當我們往裡面放水,水的體積超過了水桶的容積的時候,超過水桶容積這部分的水就會溢出了。同樣的道理,我們的記憶體給一個類型的資料配置設定的空間是固定的,當存入的資料值大小超過這個存儲空間時,超出的這部分就自然而然地溢出了。【例3.2】
#include <stdio.h>void main(){ int a,b; a = 32767; b = 1 + a; printf("%d,%d\n",a,b);}
運作出來的結果圖如下:
這段代碼的功能就是輸出a,b的數值。int在記憶體裡面占四個位元組。此時并沒有出現任何異常。但是當我們将int 改為short int 時,就變成如下情況:
這個時候就發生溢出了。為什麼呢?因為啊,雖然是十六位,但是第一位是符号位,實際用來存儲的就隻有15位。我們來看一下:32767:0111 1111 1111 1111-32768: 1000 0000 0000 0000(負數的最大數) 當在程式中遇到不同類型的資料時,編譯器會進行自動轉換,分為兩種,一種是顯式轉換,另一種是隐式轉換。通常,編譯器進行的是隐式轉換,就是将範圍小的資料類型向範圍大的轉換,而顯式轉換又稱強制轉換,将更大範圍的資料類型轉換成更小類型的資料。
此次程式編譯過程出現的一丢丢錯誤:就是在printf("%d,%d\n",a,b);這句話中,我将"後面a前面的這個逗号給省略掉之後,編譯就一直在報錯,于是檢查一遍發現後,添加上去了,就沒問題了。這裡是因為要用這個逗号進行分段,使其能夠進行區分識别是以字元串形式輸出還是以數字形式輸出。下次不能再犯這種錯誤了呀!
實型資料
1、實型常量的表示方法:
實型就是數學中的實數,C語言采用十進制表示,二進制存儲。有時候我們分不清一個數字是整型還是浮點型,舉個栗子,5.00是個整數還是浮點數呢?不确定對吧,5.00f後面加一個f。
2、存放形式
學完了表示方法我們再學習一下存儲方式,3.1415926這樣子存
符号 | 小數 | 指數 |
---|---|---|
+ | .31415926 | 1 |
我們來算一下.31415926*10^1=3.141592
一位為符号位,七位為小數位,剩餘的二十四位為指數位
小數部分占的位數越多,數的有效數字越多,精度越高;指數部分占的位數越多,則能辨別的數值範圍越大。
3、實型變量的分類
分為三種:單精度(float)、雙精度(double)、長雙精度(long float)三類。