a=3;
我們今天主要來談談變數,就是『a』
1. 變數是什麼
2. 變數的三要素
int a;
讓我們乙個乙個來解釋
變數的型別
變數名變數的定義。
3. 一點思考
為什麼整形變數會存在溢位現象呢?
溢位:
int a= 2147483647
int b = a+1;
最終 b = -2147483648
為什麼浮點型變數會有精度的丟失現象呢?
float a = 12.0f;
float b = 11.9;
float c = a - b;
最終c=0.1000003815
1. 預先了解,十進位制轉換為二進位制,原碼,補碼。
十進位制正整數如果轉換為二進位制
52(10)=110100(2進製)
十進位制小數如果轉換為二進位制
原碼補碼
2. 了解為什麼整形變數的表示會發生溢位
先計算int的表示範圍
為什麼會溢位呢
3. 了解為什麼浮點型變數會有精度丟失
12-11.9=?
* 將11.9化為二進位制為「1011. 1110011001100110011001100…」,可以看出11.9轉換為二進位制是乙個無窮的小數,按照浮點數的儲存形式(ieee754)的時候需要捨棄一些二進位制。所以在計算機中永遠無法準確儲存11.9這個數字。所以計算時會產生誤差。
* 擴充套件,如果有興趣,可以具體了解一下ieee754是如何規定浮點數的儲存的。
1.重新看一遍變數究竟是什麼?
2.指標究竟是什麼呢
int *p;
那麼指標前面的型別有什麼作用呢?
1.自動型別轉換。
出現場景
同一句語句或表示式如果使用了多種型別的變數和常量(型別混用)
規則
double ←── float 高↑ long
↑ unsigned
↑ int ←── char,short 低
1.圖中橫向箭頭表示必須的轉換,如兩個float型數參加運算,雖然它們型別相同,但仍要先轉成double型再進行運算,結果亦為double型。縱向箭頭表示當運算子兩邊的運
2.算數為不同型別時的轉換,如乙個long 型資料與乙個int型資料一起運算,需要先將int型資料轉換為long型, 然後兩者再進行運算,結果為long型。所有這些轉換都是由系統自動
進行的, 使用時你只需從中了解結果的型別即可。這些轉換可以說是自動的。
其他場景中出現自動型別轉換
1.在程式中將資料用printf函式以指定格式輸出時,當要輸出的鹽據型別與輸出格式不符時,便自動進行型別轉換2.賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值給他。
3.函式呼叫中引數傳遞時,系統隱式地將實參轉換為形參的型別後,賦給形參。
4.函式有返回值時,系統將隱式地將返回表示式型別轉換為返回值型別,賦值給呼叫函式。
舉個栗子
1.例子1
#include
int main(void)
2.例子2int main(void)
3.例子3int main(void)
2.強制型別轉換
出現場景:
需要將乙個表示式轉換成指定型別。
規則 強制型別轉換是通過型別轉換運算來實現的。
其一般形式為: (型別說明符) (表示式)
其功能是把表示式的運算結果強制轉換成型別說明符所表示的型別
舉個栗子
#include
int main (void)
基礎知識 變數型別
為何變數值 即記錄的資料 要區分型別呢?變數值使用來記錄事物狀態的,而事物的狀態 是各種各樣的,所以對應著就應該用不同型別的值 去記錄這些狀態 作用 記錄描述性質的狀態 定義 在 中包含一串字元 name egon 單行字串 多行字串 msg aaaa bbbb ccc 外層用單引號,內層就應該用雙...
C 基礎知識 變數儲存位置
1.棧區 stack 程式執行時由編譯器自動分配 存放 函式的引數值,區域性變數的值。儲存連續,其操作方式類似於資料結構中的棧。棧區處於相對較高的位址以位址的增長方向為上的話,棧位址是向下增長的,所以空間有限,windows下大多1 2m。2.堆區 heap 在記憶體開闢另一塊儲存區域。一般由程式設...
C 基礎知識 變數與常量
1.定義變數的語法 資料型別 變數名 定義乙個年齡的變數,年齡是整數,所以變數定義如下 int age 系統會根據資料型別,在記憶體中分配不同大小的儲存空間 每個資料型別後面,可以定義多個變數,如 定義姓名 家庭位址 籍貫 民族 string name,address,origin,national...