c语言无视数据类型字符串存储,C语言基础-第二课-数据类型与运算符(示例代码)...
1 ? C語言中的數據類型
1.1 ? 常量
常量就是在程序中不可變化的量,常量在定義的時候必須給一個初值。
1.1.1#define
定義一個宏常量
1.1.2const
定義一個const常量
1.2字符串常量
“hello world”
對于#define類型的常量,c語言的習慣是常量名稱為大寫,但對于普通const常量以及變量,一般為小寫結合大寫的方式
1.3二進制數、位、字節與字
我們習慣于十進制的數:10,12等
一個位只能表示0,或者1兩種狀態,簡稱bit,一個位是一個bit
一個字節為8個二進制,稱為8位,簡稱BYTE,8個比特是一個字節
一個字為2個字節,簡稱WORD。
兩個字為雙字,簡稱DWORD
1.4八進制
八進制為以8為基數的數制系統,C語言當中0表示八進制,0666;
1.5 十六進制
十六進制值16為基數 的數制系統,C語言中用0x表示十六進制
十進制
十六進制
二進制
0
0
0000
1
1
0001
2
2
0010
3
3
0011
4
4
0100
十進制轉化8進制,用十進制數作為被除數,8作為除數,取商數和余數,直到商數為0的時候,將余數倒過來就是轉化后的結果
十進制轉化16進制,用十進制數作為被除數,16作為除數,取商數和余數,直到商數為0的時候,將余數倒過來就是轉化后的結果
1.6 原碼
將最高位做為符號位(0代表正,1代表負),其余各位代表數值本身的絕對值
+7的原碼是00000111
-7的原碼是10000111
+0的原碼是00000000
-0的原碼是10000000
1.7 反碼
一個數如果值為正,那么反碼和原碼相同
一個數如果為負,那么符號位為1,其他各位與原碼相反
+7的反碼00000111
-7的反碼11111000
-0的反碼11111111
1.8補碼
原碼和反碼都不利于計算機的運算,如:原碼表示的7和-7相加,還需要判斷符號位。
正數:原碼,反碼補碼都相同
負數:最高位為1,其余各位原碼取反,最后對整個數 + 1
-7的補碼:=
10000111(原碼)
111111000(反碼)
11111001(補碼)
+0的補碼為00000000
-0的補碼也是00000000
補碼符號位不動,其他位求反,最后整個數 + 1,得到原碼
用補碼進行運算,減法可以通過加法實現
7-6=1
7的補碼和-6的補碼相加:00000111 + 11111010 = 100000001
進位舍棄后,剩下的00000001就是1的補碼
-7+6 = -1
-7的補碼和6的補碼相加:11111001 + 00000110 = 11111111
11111111是-1的補碼
1.9 sizeof關鍵字
sizeof是c語言關鍵字,功能是求指定數據類型在內存中的大小,單位:字節
sizeof與size_t類型
1.10 int類型
1.10.1 int常量,變量
int就是32位的一個二進制整數,在內存當中占據4個字節的空間
1.10.2 ? printf輸出int值
%d,輸出一個有符號的10進制整數,%u,代表輸出一個無符號的十進制整數
1.10.3 ? printf輸出八進制和十六進制
%x,代表輸出16進制數,%X,用大寫字母方式輸出16進制數
%o代表輸出八進制數
1.10.4 ? short,long,long long,unsigned int
short意思為短整數,在32位系統下是2個字節,16個比特
long意思為長整數,在32位的系統下,long都是4個字節的,在64位系統下,windows還是4個字節,unix下成了8個字節。
Int不管是32位系統下,還是64位系統下,不論是windows還是unix都是4個字節的
Long long是64位,也就是8個字節大小的整數,對于32位操作系統,CPU寄存器是32位,所以計算longlong類型的數據,效率很低
9l,9L,9ll,9LL,9u,9ull,9ULL
1.10.5 ? 整數溢出
計算一個整數的時候超過整數能夠容納的最大單位后,整數會溢出,溢出的結果是高位舍棄。
當一個小的整數賦值給大的整數,符號位不會丟失,會繼承
1.10.6 ? 大端對齊與小端對齊
對于arm,intel這種x86構架的復雜指令CPU,整數在內存中是倒著存放的,低地址放低位,高地址放高位,小端對齊。
但對于unix服務器的CPU,更多是采用大端對齊的方式存放整數
1.11 ? char類型
1.11.1 ? char常量,變量
char c;定義一個char變量
‘a’,char的常量
Char的本質就是一個整數,一個只有1個字節大小的整數
1.11.2 ? printf輸出char
%c意思是輸出一個字符,而不是一個整數
1.11.3 ? 不可打印char轉義符
\a,警報
\b退格
\n換行
\r回車
\t制表符
\\斜杠
\’單引號
\”雙引號
\?問號
1.11.4 ? char和unsigned char
char取值范圍為-128到127
unsigned char為0-255
1.12 ? 浮點float,double,long double類型
1.12.1 ? 浮點常量,變量
Float在32位系統下是4個字節,double在32位系統下是8個字節
小數的效率很低,避免使用,除非明確的要計算一個小數。
1.12.2 ? printf輸出浮點數
%f,%Lf
%f是輸出一個double
%lf輸出一個long double
1.13 ? 類型限定
1.13.1 ? const
const是代表一個不能改變值的常量
1.13.2 ? volatile
代表變量是一個可能被CPU指令之外的地方改變的,編譯器就不會針對這個變量去優化目標代碼。
1.13.3 ? register
變量在CPU寄存器里面,而不是在內存里面。但regist是建議型的指令,而不是命令型的指令
2 ??字符串格式化輸入與輸出
2.1 ? 字符串在計算機內部的存儲方式
字符串是內存中一段連續的char空間,以’\0’結尾
“”是C語言表達字符串的方式
2.2 ? printf函數,putchar函數
printf格式字符
字符
對應數據類型
含義
d
int
接受整數值并將它表示為有符號的十進制整數
hd
Short int
短整數
hu
Unsigned short int
無符號短整數
o
unsigned int
無符號8進制整數
u
unsigned int
無符號10進制整數
x / X
unsigned int
無符號16進制整數,x對應的是abcdef,X對應的是ABCDEF
f
float或double
e / E
double
科學計數法表示的數,此處"e"的大小寫代表在輸出時用的“e”的大小寫
c
char
字符型??梢园演斎氲臄底职凑誂SCII碼相應轉換為對應的字符
s / S
char * / wchar_t *
字符串。輸出字符串中的字符直至字符串中的空字符(字符串以‘\0‘結尾,這個‘\0‘即空字符)
p
void *
以16進制形式輸出指針
%
%
輸出一個百分號
printf附加格式
字符
含義
l
附加在d,u,x,o前面,表示長整數
-
左對齊
m(代表一個整數)
數據最小寬度
0
將輸出的前面補上0直到占滿指定列寬為止不可以搭配使用-
N(代表一個整數)
寬度至少為n位不夠以空格填充
Putchar是顯式一個字符的函數
2.3 ? scanf函數與getchar函數
scanf通過鍵盤讀取用戶輸入,放入變量中,記得參數一定是變量的地址(&)
int a = 0;
int b = 0;
scanf("%d", &a);//一定要用&取變量的地址
scanf("%d", &b);//一定要用&取變量的地址
Getchar得到用戶鍵盤輸入的字符
3 ? 運算符表達式和語句
3.1 ? 基本運算符
3.1.1 ? =
數據對象:泛指數據在內存的存儲區域
左值:表示可以被更改的數據對象
右值:能賦給左值的量
3.1.2 ? +
加
3.1.3 ? –
減
3.1.4 ? *
乘
3.1.5 ? /
除
3.1.6 ? %
取余數
3.1.7 ? +=
加等于
3.1.8 ? -=
減等于
3.1.9 ? *=
乘等于
3.1.10 ? /=
除等于
3.1.11 ? %=
取余等于
3.1.12 ? ++
自加1
,i++先計算表達式的值,然后再++
,++i是先++,再計算表達式的值
3.1.13 ? --
自減一
3.1.14 ? 逗號運算符
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int i = (a = b, c + d);
逗號表達式先求逗號左邊的值,然后求右邊的值,整個語句的值是逗號右邊的值。
3.1.15 ? 運算符優先級
優先級
運算符
結合性
1
++(后綴),--(后綴),()(調用函數),{}(語句塊),.,->
從左到右
2
++(前綴),--(前綴),+(前綴),-(前綴),!(前綴),~(前綴),sizeof,*(取指針值),&(取地址),(type)(類型轉化)
從右到左
3
*, /, %
從左到右
4
+,-
從左到右
5
<< >>
從左到右
6
< > <= >=
從左到右
7
== !=
從左到右
8
&
從左到右
9
^
從左到右
10
|
從左到右
11
&&
從左到右
12
||
從左到右
13
?
從右到左
14
=,*=,%=,+=,-=,<<=,>>=,&=,|=,^=
從右到左
15
,(逗號運算符)
從左到右
3.2 ? 復合語句
{}代碼塊
3.3 ? 空語句
只有一個;號的語句就是空語句,空語句在C語言里面和合法的,并且是在某些場合必用的
3.4 ? 類型轉化
double f = (double)3 / 2;
()為強制類型轉化運算符
總結
以上是生活随笔為你收集整理的c语言无视数据类型字符串存储,C语言基础-第二课-数据类型与运算符(示例代码)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 风扇能不能吊顶上去?
- 下一篇: c语言输出参数是out,关于C语言中的输