常量 - 不會變化的數據
- “hello” ‘A’ 10 3.14
- #define PI 3.14 //採用宏定義的方法 定義一個常量
- const int a = 10;
求圓的面積和周長
#include <stdio.h>
#define PI 3.14
int main(void)
{
//圓的面積 s = r * r * PI
int r = 3;
float s = PI * r * r;
//圓的周長 l = 2 * PI * r
float l = PI * r * 2;
printf("圓的面積是%f\n",s);
printf("圓的周長是%f\n",l);
//保留小數點後兩位
printf("保留小數點後兩位後的結果,對第三位進行四捨五入後的結果\n");
printf("圓的面積是%.2f\n",s);
printf("圓的周長是%.2f\n",l);
return 0;
}
變量 - 會變化的數據
定義語法
類型 名 變量名 = 變量值;
int x = 123;
變量三要素
- 類型名
- 變量名
- 變量值 可以使表達式,也可以是常量
存儲空間
每一個存儲空間都有 0xaabb 類似的指針指向的地址
空間大小由變量類型決定,比如說int是 4 字節
變量的定義和聲明區別
定義是賦值了
int x = 123;
聲明沒有賦值
int a;
或
extern int a; 有 extern關鍵字就不會提升爲定義了
區別:
- 變量定義會開闢內存空間
- 變量 聲明不會開闢內存空間,變量沒定義,使用之前會自動尋找變量聲明提升爲定義
- 變量要想使用,必須要定義,沒寫就自動給值
標識符
命名規則
- 常量 大寫
- 變量 小寫
- 只能使用字母,數字,下劃線(_)
- 數字不能開頭
整型
定義
short
int
long
long long
輸出
%d
sizeof求佔用空間大小
#include <stdio.h>
int main(void)
{
short s = 1;
int a = 40;//
long l1 = 111111;
long long ll1 = 9999999999999999999;
printf("short大小爲:%d個字節\n",sizeof(s));
printf("int大小爲:%d個字節\n",sizeof(a));
printf("long大小爲:%d個字節\n",sizeof(l1));
printf("long long大小爲:%d個字節\n",sizeof(ll1));
printf("short大小爲:%d個字節\n", sizeof(short));
printf("int大小爲:%d個字節\n", sizeof(int));
printf("long大小爲:%d個字節\n", sizeof(long));
printf("long long大小爲:%d個字節\n", sizeof(long long));
return 0;
}
輸出
short大小爲:2個字節
int大小爲:4個字節
long大小爲:4個字節
long long大小爲:8個字節
short大小爲:2個字節
int大小爲:4個字節
long大小爲:4個字節
long long大小爲:8個字節
有符號整型signed 有符號可以爲正數或負數
超級不常用
signed int a = 10;
無符號類型unsigned 無符號一定是正數
unsigned int a = 10; //表示a 一定是無符號,指的是數據量,不表示方向(沒有正負 )
數據類型
整數類型總結
有符號類型signed
short %hd 2字節
int %d 4字節
long %ld 4字節 Windows32位和64位都是4字節,linux 32位是4字節,64位是8字節
long long %lld 8字節
無符號類型unsigned
unsigned short %hu 2字節
unsigned int %u 4字節
unsigned long %lu 4字節 Windows32位和64位都是4字節,linux 32位是4字節,64位是8字節
unsigned long long %llu 8字節
字符類型char
char c = ‘A’ ;//單引號
#include <stdio.h>
int main(void)
{
char c = 'A';
printf("%c\n",c); //A
printf("%d\n",c); //65
c = '#';
printf("%c\n",c); //#
printf("%d\n",c); //35
c = 97;
printf("%c\n", c); //a
printf("%d\n", c); //97
return 0;
}
大小寫轉換
#include <stdio.h>
int main(void)
{
//大小寫轉換 差32
char c = 'M';
printf("%c\n", c);
c += 32;
printf("%c\n",c);
return 0;
}
認識幾個重要字符
‘A’ 65
‘a’ 97
‘0’ 48
‘\n’ 10
‘\0’ 0
轉義字符: ‘\’ 反斜槓,將普通字符轉爲特殊意義,也可以反轉
浮點型,小數型
單精度浮點型float 4字節
定義
float f = 1.234f
尾不加 f 默認是 double
默認保留6位小數
無符號的單精度浮點型
unsigned float f = 4.234
輸出時候
用%f
用%.3f 控制小數點後位數
用%5.3f 控制小數點後位數,和所佔的空間
用%05.3f 控制小數點後位數,和所佔的空間,不足的地方用0表示
雙精度浮點型double 8字節
定義
double d = 5.324534
無符號的雙精度浮點型
unsigned double d = 5.7545
輸出時候
用%lf
用%.6lf 控制小數點後位數
用%8.6lf 控制小數點後位數,和佔8位空間
用%08.6lf 控制小數點後位數,和佔8位空間,不足的地方用0表示
有符號類型
#include <stdio.h>
int main(void)
{
float f = 3.14f;
double d = 4.566;
//默認輸出小數點後6位
printf("%f\n", f); //3.140000
printf("%lf\n", d);//4.566000
//可以通過.的方式限制小數點後面位數,多餘的 四捨五入,不夠的用0補上
printf("%.2f\n",f);//3.14
printf("%.3lf\n",d);//4.566
//可以通過前面固定佔幾位的空間
printf("%5.2f\n", f);// 3.14
printf("%6.3lf\n", d);// 4.566
//可以通過前面固定佔幾位的空間,不足的地方用0補齊
printf("%05.2f\n", f);//03.14
printf("%06.3lf\n", d);//04.566
}
科學計數法賦值
float f = 2.3e3f
float f = 2.3e-3f
進制轉換
計算機內部存儲 - 二進制
十進制轉二進制:
除二反向取餘
二進制轉十進制
按照 1*2的次冪來 相加,如果位上是0 就不相加了
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
2^1 = 2
2^0 = 1
八進制轉十進制
定義八進制的語法:
056:零開頭,每位數是0-7之間
每一個位是8的幾次方
0 5 6
5個8的一次方 = 40
6個8的零次方 = 6
結果46
八進制轉二進制: 三位421法
除二反向取餘
056 對應二進制
按照421來,一個8禁止爲對應三位二進制
5的二進制是 101
6的二進制是 110
8進制056的二進制是
101 110
八進制05326轉二進制
101011010110
二進制轉換八進制
三位一組轉換成8進制,從右往前分
001 101 010 101 001
1 5 2 5 1
015251
十六進制轉十進制
十六進制表示方法:
0xFD89A2
A–10
B–11
C–12
D–13
E–14
F–15
16^5 16^4 16^3 16^2 16^1 16^0
0x F D 8 9 A 2
1048576x15 + 65536x13 + 4096x8 + 256x9 + 16x10 + 1 x 2
=15728640 + 851968 +32768 +2304 +160 +2
=16615842
十六進制轉二進制 四位8421法
0x 1A
1 A
0001 1010
00011010
二進制轉16進制 四位一算
0101 0101 1001 0010 1110
0x 5 5 9 2 E
0x5592e
輸出格式統計
格式 | 表示 | 類型 |
---|---|---|
%d | 有符號 - 十進制整型 | int |
%u | 無符號 - 十進制整型 | unsigned int |
%o | 八進制 | |
%x | 十六進制 | |
%hd | 有符號 - 短整型 | short |
%hu | 無符號 - 短整型 | unsigned short |
%ld | 有符號 - 長整型 | long |
%lu | 無符號 - 長整型 | unsigned long |
%lld | 有符號 - 長長整型 | long long |
%llu | 無符號 - 長長整型 | unsigned long long |
%c | 字符型 | char |
%f | 浮點型 | float |
%lf | 雙精度浮點型 | double |
%c | 字符 | char |
%s | 字符串 | String |
%m.d | 實型 一共有m位(整數.小數.小數點),n位小數 | |
%0m.d | 實型 一共有m位(整數.小數.小數點),n位小數,前面不足用0表示 |
原碼反碼補碼
原碼
特點:
-
最高位爲符號位,0表示正,1表示負
-
其他樹脂部分就是數值本身絕對值的二進制數
-
負數的原碼是在絕對值的基礎上,最高位變爲1
十進制數 | 原碼 |
---|---|
+15 | 0000 1111 |
-15 | 1000 1111 |
+0 | 0000 0000 |
-0 | 1000 0000 |
反碼
特點
-
對於正數:反碼和原碼相同
-
對於負數:符號位不變,其他部分取反0變1,1變0
十進制數 | 反碼 |
---|---|
+15 | 0000 1111 |
-15 | 1111 0000 |
+0 | 0000 0000 |
-0 | 1111 1111 |
補碼 (現今計算機採用的存儲方式)
特點
-
正數的原碼反碼補碼都一樣
-
負數的補碼是: 反碼基礎上+1
-
最高位表示符號位
-
其餘位取反 + 1
43-27 ==> 43 + -27
00101011
10011011
11100100
11100101
00010000
算出來是二進制16
人爲規定
00000000 ==> 0
11111111 ==> -128
char類型 8個比特位,最高表示符號,數值位有7個
最大數值就是-2^7 到 2^7-1 (因爲多了一個0) = -2^(8-1) 到 -2^(8-1)-1
-128~127
而無符號位的第一位不用表示符號,就能表示 2^8 - 1(有一個0)個
0 ~255
int類型4x8 = 32比特位個,最高位表示符號,數值位有31個
最大數值就是-2^31 到 2^31-1(因爲多了一個0)
-2147483648 ~ 2147483647
無符號整形就是:0 - 2^32 -1 0 ~ 4294967295
long類型 4x8 = 32比特位,最高位表示符號,數值位有31個
最大數值就是-2^31 到 2^31-1(因爲多了一個0)
-2147483648 ~ 2147483647
無符號長整形 首位作爲數值位了後範圍:04294967295(0(2^32-1)
long long類型 8x8 = 64bit
範圍:-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807 (922*10^16)
無符號類型長長整型爲 0 ~ 1844 6744 0737 0955 1615 (1844*10^16)
數據溢出
char 取值範圍 -128 - 127
char c = 127+1;
= 01111111 +1
=10000000 = -128
10000001 = -127