天天看點

C語言——整型變量

标題整型變量的分類:

(注意:占幾個位元組跟作業系統和編譯器規定有關,可以在編譯器上調試檢視!)

1)基本型:類型說明符為int,在記憶體中占4個位元組

2)短整型:short int或short,所占位元組和取值範圍基本相同

3)長整型:long int或long,在記憶體中占4個記憶體

4)無符号型:為unsigned

在編譯器中輸出變量類型所占位元組數:

C語言——整型變量
C語言——整型變量

說明一下,這個程式我原本以為會運作得很順利,結果還是出了點小插曲。仔細檢查發現了,就是這個逗号用成了中文的形式,然後立馬改回來了,就輸出正确結果。事實證明,在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均以整型的形式輸出。

輸出的結果如圖所示:

C語言——整型變量

當然我們這裡是以字母相加的形式輸出,我們也可以用%d對其進行替換,輸出數字相加的形式,當然後面對應%d的字母也要相應替換掉,否則會亂掉,以圖為鑒:

C語言——整型變量

溢出

溢出呢,怎麼了解比較好一些呢?打個比方吧,我們來想一下一個水桶,水桶的容積是固定的,也就是說這個水桶能裝多少水是固定的,當我們往裡面放水,水的體積超過了水桶的容積的時候,超過水桶容積這部分的水就會溢出了。同樣的道理,我們的記憶體給一個類型的資料配置設定的空間是固定的,當存入的資料值大小超過這個存儲空間時,超出的這部分就自然而然地溢出了。

【例3.2】

#include <stdio.h>

void main()
{
  int a,b;
  a = 32767;
  b = 1 + a;
  printf("%d,%d\n",a,b);
}
           

運作出來的結果圖如下:

C語言——整型變量

這段代碼的功能就是輸出a,b的數值。int在記憶體裡面占四個位元組。此時并沒有出現任何異常。但是當我們将int 改為short int 時,就變成如下情況:

C語言——整型變量

這個時候就發生溢出了。為什麼呢?

因為啊,雖然是十六位,但是第一位是符号位,實際用來存儲的就隻有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在編譯器中輸出變量類型所占位元組數:

C語言——整型變量

C語言——整型變量

說明一下,這個程式我原本以為會運作得很順利,結果還是出了點小插曲。仔細檢查發現了,就是這個逗号用成了中文的形式,然後立馬改回來了,就輸出正确結果。事實證明,在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均以整型的形式輸出。輸出的結果如圖所示:

C語言——整型變量

當然我們這裡是以字母相加的形式輸出,我們也可以用%d對其進行替換,輸出數字相加的形式,當然後面對應%d的字母也要相應替換掉,否則會亂掉,以圖為鑒:

C語言——整型變量

## 溢出溢出呢,怎麼了解比較好一些呢?打個比方吧,我們來想一下一個水桶,水桶的容積是固定的,也就是說這個水桶能裝多少水是固定的,當我們往裡面放水,水的體積超過了水桶的容積的時候,超過水桶容積這部分的水就會溢出了。同樣的道理,我們的記憶體給一個類型的資料配置設定的空間是固定的,當存入的資料值大小超過這個存儲空間時,超出的這部分就自然而然地溢出了。【例3.2】

#include <stdio.h>void main(){ int a,b; a = 32767; b = 1 + a; printf("%d,%d\n",a,b);}

運作出來的結果圖如下:

C語言——整型變量

這段代碼的功能就是輸出a,b的數值。int在記憶體裡面占四個位元組。此時并沒有出現任何異常。但是當我們将int 改為short int 時,就變成如下情況:

C語言——整型變量

這個時候就發生溢出了。為什麼呢?因為啊,雖然是十六位,但是第一位是符号位,實際用來存儲的就隻有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)三類。

繼續閱讀