常量:不會變化的資料。不能被修改。
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
#include <stdio.h>
#define N 1024
#define EXIT_SUCCESS 0
int main(void)
{
int a = 10;
printf("這是一個常量 N:%d\n", N);
printf("這是一個變量 a:%d\n", a);
return EXIT_SUCCESS;
}
#include <stdio.h>
#define PI 3.1415
int main(void)
{
const int r = 3; // 定義一個隻讀變量
//圓的面積 = PI x 半徑的平方
float s = PI * r * r;
//圓的周長 = 2 x PI x 半徑
float l = 2 * PI * r;
printf("圓的周長為:%f\n", l); // 預設顯示 6 位小數。
printf("圓的面積為:%f\n", s);
printf("圓的周長還可以寫成:%.2f\n", PI * r * r);
printf("圓的面積還可以寫成:%.2f\n", 2 * PI * r); // 指定保留小數點後保留2位,對第3位進行4舍五入
return 0;
}
#include <stdio.h>
int main(void)
{
int var = 54; // 定義一個變量 var, 定義的同時指定初值為 54
var = 238; // 使用變量,給變量var賦新值 238
printf("var = %d\n", var); // 使用變量,列印變量var的值到螢幕。
return 0;
}
#include <stdio.h>
#define EXIT_SUCCESS 0
int main(void)
{
int a = 10; // 定義有符号整數 a, 給a賦初值為 10
short b = 20; // 定義有符号整數 b, 給a賦初值為 20
long c = 30L; // 定義有符号整數 c, 給a賦初值為 30, 可以簡寫為 long c = 30;
long long d = 40LL; // 定義有符号整數 d, 給a賦初值為 40, 可以簡寫為 long long d = 40;
printf("sizeof(a)= %d\n", sizeof(a));
printf("sizeof(b)= %d\n", sizeof(b));
printf("sizeof(c)= %d\n", sizeof(c));
printf("sizeof(d)= %d\n", sizeof(d));
printf("按類型, int 大小為:%d\n", sizeof(int));
printf("按類型, short 大小為:%d\n", sizeof(short));
printf("按類型, long 大小為:%d\n", sizeof(long));
printf("按類型, long long 大小為:%d\n", sizeof(long long));
// system("pause");
return EXIT_SUCCESS;
}
#include <stdio.h>
int main(void)
{
char ch = 'a';
printf("sizeof(ch) = %u\n", sizeof(ch));
printf("%c\n", 97); //字元'a'
printf("%c\n", 65); //字元'A'
char A = 'A'; // 定義字元變量 A, 初值為 ‘A’
char a = 'a'; // 定義字元變量 a, 初值為 ‘a’
printf("a = %d\n", a); //字元'a'的ASCII的值97
printf("A = %d\n", A); //字元'A'的ASCII的值65
printf("A = %c\n", 'a' - 32); //小寫a轉大寫A
printf("a = %c\n", 'A' + 32); //大寫A轉小寫a
ch = ' ';
printf("空格ASCII的值:%d\n", ch); //空格ASCII的值 32
printf("\'\\n\'ASCII的值:%d\n", '\n'); //換行符ASCII的值 10
printf("字元\'\\0\':%d\n", '\0'); //字元'\0'的ASCII的值 0
printf("字元\'0\':%d\n", '0'); //字元'0'的ASCII的值 48
return 0;
}
#include <stdio.h>
int main(void)
{
char ch; // 有符号 char 型資料,取值範圍 -128~127
//符号位溢出會導緻數的正負發生改變
ch = 0x7f + 2; //因為:0x7f == 0111 1111 == 127,是以 等價于 ch = 127 + 2;
printf("%d\n", ch);
// 0111 1111
//+2後 1000 0001,這是負數補碼,其原碼為 1111 1111,結果為-127
//最高位的溢出會導緻最高位丢失
unsigned char ch2;
ch2 = 0xff+1; //因為:0xff == 255 == 1111 1111,是以 等價于 ch2 = 255 + 1;
printf("%u\n", ch2);
// 1111 1111
//+1後 10000 0000, char隻有8位最高位的溢出,結果為0000 0000,十進制為0
ch2 = 0xff + 2; //因為:0xff == 255 == 1111 1111,是以 等價于 ch2 = 255 + 2;
printf("%u\n", ch2);
// 1111 1111
//+1後 10000 0001, char隻有8位最高位的溢出,結果為0000 0001,十進制為1
return 0;
}