C語言-變數常量資料型別

你老哥發表於2023-12-02


常量:不會變化的資料。不能被修改。

1. “hello”、'A'、-10、3.1415926(浮點常量)

2. #define PI 3.1415 【強調】:沒有分號結束標記。 【推薦】 定義宏: 定義語法: #define 宏名 宏值

3. const int a = 10; 定義語法:const 型別名 變數名 = 變數值。

const關鍵字: 被該關鍵字修飾的變數,表示為只讀變數。


變數:會變化的資料。能被修改。

定義語法:型別名 變數名 = 變數值。(一般方法)

變數三要素:型別名、變數名、變數值。 int r = 3; float s = PI*r*r;(變數值是一個表示式)

變數的定義: int a = 40;

變數的宣告: 1) int a; 沒有變數值的變數定義 叫做宣告。

2)extern int a; 新增了關鍵字 extern。

1. 變數定義會開闢記憶體空間。變數宣告不會開闢記憶體空間。

2. 變數要想使用必須有定義。

當編譯器編譯程式時,在變數使用之前,必須要看到變數定義。如果沒有看到變數定義,編譯器會自動找尋一個變數宣告提升成為定義。

如果該變數的宣告前有 extern 關鍵字,無法提升。


【建議】:定義變數時。儘量不要重名。

識別符號:

變數和常量的統稱。

命名規則: 1. 通常常量使用大寫、變數使用小寫。大小寫嚴格區分。

2. 只能使用字母、陣列、下劃線(_)命名識別符號。且,數字不能開頭。 a-z/A-Z/0-9/_

int a5ir = 10; ok

int _34F = 6; ok

float s2_i85c = 5.4; ok

int 98ti_54 = 4; error.

3. 禁止使用關鍵字和系統函式作為識別符號名稱。 main/system/printf/sleep....

sizeof關鍵字:

不是函式。用來求一個變數、型別的大小。 返回一個 無符號整數。 使用 %u 接收返回值。

方法1: sizeof(型別名) -- sizeof(int)

方法2: sizeof(變數名) --- int a = 20; sizeof(a)

【瞭解】: sizeof 變數名/型別名 舉例1: sizeof int

舉例2: sizeof a

有符號整型:

signed: 有符號 (超級不常用, 通常省略): int a = 10; a = -7;

int型別: %d 4 位元組

int 名 = 值;

short型別: %hd 2 位元組

short 名 = 值; short s1 = 3;

long型別: %ld 4 位元組 (windows: 32/64: 4位元組; Linux:32位:4位元組, 64位:8位元組)

long 名 = 值; long len = 6;

long long 型別:%lld 8 位元組

long long 名= 值; long long llen = 70;


無符號整型:

unsigned: 無符號 只表示資料量,而沒有方向(沒有正負)

unsigned int型別: %u 4 位元組

unsigned int 名 = 值;

unsigned int a = 40;

unsigned short型別: %hu 2 位元組

unsigned short 名 = 值;

unsigned short s1 = 3;

unsigned long型別: %lu 4 位元組 (windows: 32/64: 4位元組; Linux:32位:4位元組, 64位:8位元組)

unsigned long 名 = 值;

unsigned long len = 6;

unsigned long long 型別:%llu 8 位元組

unsigned long long 名 = 值;

unsigned long long llen = 70;


char字元型別:1位元組

儲存一個字元。本質是ASCII碼。 ‘A’、‘a’、‘%’、‘#’、‘0’

格式匹配符: %c

‘A’:65

‘a’:97

‘0’:48

‘\n’:10

‘\0’: 0


跳脫字元:

‘\’ 將普通字元轉為 特殊意。 將特殊字元轉為本身意。

'\n' 和 ‘\0’


實型(浮點數、小數):

float: 單精度浮點型。 4位元組

float v1 = 4.345;

%f格式匹配符。 預設保留 6 位小數。

double:雙精度浮點型。 8位元組 【預設】

double v2 = 5.678;

unsigned float v1 = 4.345; 無符號的 float 資料

unsigned double v2 = 5.678; 無符號的 float 資料

printf("n = %08.3f\n", n);

輸出的含義為:顯示8位數(包含小數點), 不足8位用0填充。並且保留3位小數。對第4位做四捨五入。


進位制和轉換:

十進位制轉2進位制。 --- 除2反向取餘法。 【重點】

十進位制轉8進位制。 --- 除8反向取餘法。

十進位制轉16進位制。--- 除16反向取餘法。

int a = 56; -- 111000

int b = 173; -- 10101101

2進位制轉10進位制。

2^10 = 1024

2^9 = 512

2^8 = 256

2^7 = 128

2^6 = 64

2^5 = 32

2^4 = 16

2^3 = 8

2^2 = 4

8進位制:

8進位制轉10進位制。

定義8進位制數語法:

056: 零開頭,每位數0~7之間。 ---- 46

0124: ---- 84

8進位制轉2進位制。

按421碼將每個八進位制位展開。

056:5--》 101。 6--》 110 。

101110

05326:5 --》 101。 3--》 011。 2--》 010。 6--》 110

2進位制轉8進位制:

1 010 111 010 110: 012726

自右向左,每3位一組,按421碼轉換。高位不足三位補0

16進位制:

語法: 以0x開頭,每位 取 0-9/A-F/a-f

A -- 10

B -- 11

C -- 12

D -- 13

E -- 14

F -- 15
16 -- 10:

0x1A: 16+10 = 26

0x13F:15+3x16+256

16 -- 2:

0x1A: 00011010

0x13F: 000100111111

2 -- 16:

0001 0011 1111: 13F

自右向左,每4位一組,按8421碼轉換。高位不足三位補0

總結:

int m = 0x15F4;

int n = 345;

int var = 010011; // 不允許。 不能給變數直接複製 二進位制資料。

輸出格式:

%d %u %o %x %hd %hu %ld %lu %lld %llu %c %f %lf

%d %u %x %c %s

儲存知識:

1 bit位 就是一個 二進位制位

一個位元組 1B = 8bit位。

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB


原始碼反碼補碼:【瞭解】

原始碼:
43 -> 00101011
-43 --> 10101011

反碼:
43 -> 00101011
-43 --> 10101011
11010100

補碼:(現今計算機採用的儲存形式)

43 -> 00101011 : 正數不變
-43 --> 11010101 : 負數,最高位表符號位, 其餘取反+1

43-27 ==》 43 + -27


人為規定: 10000000 --》 -128

-------------------------------------------------

char 型別:1位元組 8個bit位。 數值位有7個。

有符號: -2^7 --- 2^7-1 == -2^(8-1) -- 2(8-1) -1

--》 -128 ~ 127

無符號: 0 ~ 2^8 -1

--》 0~255

不要超出該資料型別的儲存範圍。


short型別:2位元組 16bit

有符號: -2^15 --- 2^15-1 == -2^(16-1) -- 2(16-1) -1

--》 -32768 ~ 32767

無符號: 0 ~ 2^8 -1

--》 0~65535

int 型別:4位元組 -2^(32-1) -- 2^(32-1)-1

有符號:

--》 -2147483648 ~ 2147483647

無符號: 0~2^32 -1

--》 0~4294967295

long型別:4位元組

有符號:

--》 -2147483648 ~ 2147483647

無符號: 0~2^32 -1

--》 0~4294967295

longlong 型別:8位元組


有符號:
--》 -2^(63) ~ 2^(63)-1

無符號:

--》 0~2^63-1

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

相關文章