一恼策、算術(shù)運算
C語言一共有34種運算符,包括了常見的加減乘除運算
1潮剪、加法運算+
除開能做加法運算,還能表示正號:+5分唾、+90
2抗碰、減法運算-
除開能做減法運算,還能表示符號:-10绽乔、-29
3弧蝇、乘法運算*
注意符號,不是x折砸,而是*
4看疗、除法運算/
注意符號,不是÷睦授,也不是\两芳,而是/
整數(shù)除于整數(shù),還是整數(shù)去枷。1/2的值是0怖辆,這個并不是二分之一
5是复、取余運算%
什么是取余:兩個整數(shù)相除之后的余數(shù)
%兩側(cè)只能是整數(shù)
正負性取決于%左側(cè)的數(shù)值
6、注意點
?自動類型轉(zhuǎn)換
int a = 10.6;
int b = 10.5 + 1.7;
自動將大類型轉(zhuǎn)換為了小類型竖螃,會丟失精度
?自動類型提升
int b = 10.5 + 10;
將右邊的10提升為了double類型
double b = 1.0 / 2;
解決除法的精度問題
?強制類型轉(zhuǎn)換
double a = (double)1 / 2;
double b = (double)(1 / 2);
?運算順序
表達式
結(jié)合性(結(jié)合方向):2+3+4
優(yōu)先級:5+4*8-3
二淑廊、賦值運算
1、簡單賦值
int a = 10 + 5;的運算過程
a = b = 10;的運算過程
等號左邊不能是常量特咆,比如10 = 11;
2季惩、復(fù)合賦值
復(fù)加減乘除余:a += 4 + 5;
3、自增自減
? 簡單使用
++ 自增運算符腻格。如a++画拾,++a,都等價于a = a+1
自減運算符荒叶。如a--碾阁,--a,都等價于a = a-1
5++是錯誤的
? ++a和a++的區(qū)別
int a = 10;
a++; ++a;
int b = a++; //b的結(jié)果還是10
int b = ++a;//b的結(jié)果為11
總結(jié)??: a的結(jié)果都是11,a的值始終會做疊加些楣,如果是++a脂凶,
b的值才會做疊加
四、sizeof
1愁茁、作用
用來計算一個變量或者一個常量蚕钦、一種數(shù)據(jù)類型所占的內(nèi)存字節(jié)數(shù)
2、基本形式
? sizeof( 變量\常量 )
? sizeof 變量\常量
? sizeof( 數(shù)據(jù)類型 )
? 不能是sizeof 數(shù)據(jù)類型,必須得有括號
練習(xí)結(jié)果??
#include <stdio.h>
int main()
{
int a = sizeof(int);
int b = sizeof(2.8);
printf("int所占字節(jié)數(shù):%d\n",a);//輸出為4
printf("double所占字節(jié)數(shù):%d\n",b);//輸出為8
}
五鹅很、關(guān)系運算符
1嘶居、條件判斷
? 默認情況下,我們在程序中寫的每一句正確代碼都會被執(zhí)行促煮。
但很多時候邮屁,我們想在某個條件成立的情況下才執(zhí)行某一段代碼
? 這種情況的話可以使用條件語句來完成,但是我們暫時不學(xué)習(xí)條件語句菠齿,
先來看一些更基礎(chǔ)的知識:如何判斷一個條件成不成立佑吝。
2、真假
? 在C語言中绳匀,條件成立稱為“真”芋忿,條件不成立稱為“假”,
因此疾棵,判斷條件是否成立戈钢,就是判斷條件的“真假”。
? 怎么判斷真假呢是尔?C語言規(guī)定殉了,任何數(shù)值都有真假性,
任何非0值都為“真”嗜历,只有0才為“假”。
也就是說,108宗兼、-18唁奢、4.5、-10.5等都是“真”,0則是“假”。
#提交判斷返回的是一個bool類型
#true為1,false為0
#要輸出bool需要導(dǎo)入#include <stdbool.h>
3傻粘、使用注意
? 關(guān)系運算符中==、!=的優(yōu)先級相等帮掉,<弦悉、<=、>蟆炊、>=的優(yōu)先級相等稽莉,且(==、!=)的優(yōu)先級低于()
? 關(guān)系運算符的結(jié)合方向為“從左往右”: 4>3>2
? 關(guān)系運算符的優(yōu)先級小于算術(shù)運算符:3+4>8-2
六涩搓、邏輯運算符
? 有時候污秆,我們需要在多個條件同時成立的時候才能執(zhí)行某段代碼,
比如:用戶只有同時輸入了QQ和密碼昧甘,才能執(zhí)行登錄代碼良拼,
如果只輸入了QQ或者只輸入了密碼,就不能執(zhí)行登錄代碼充边。
這種情況下庸推,我們就要借助于C語言提供的邏輯運算符。
? 邏輯運算的結(jié)果只有2個:“真”為1浇冰,“假”為0
1贬媒、&& 邏輯與
1> 使用格式
“條件A && 條件B”
2> 運算結(jié)果
只有當(dāng)條件A和條件B都成立時,結(jié)果才為1肘习,也就是“真”掖蛤;其余情況的結(jié)果都為0,也就是“假”井厌。因此,條件A或條件B只要有一個不成立致讥,結(jié)果都為0仅仆,也就是“假”
3> 運算過程
總是先判斷條件A是否成立
? 如果條件A成立,接著再判斷條件B是否成立:如果條件B成立垢袱,“條件A && 條件B”的結(jié)果就為1墓拜,即“真”,如果條件B不成立请契,結(jié)果就為0咳榜,即“假”
? 如果條件A不成立夏醉,就不會再去判斷條件B是否成立:因為條件A已經(jīng)不成立了,不管條件B如何涌韩,“條件A && 條件B”的結(jié)果肯定是0畔柔,也就是“假”
4> 舉例
邏輯與的結(jié)合方向是“自左至右”。比如表達式 (a>3) && (a<5)
? 若a的值是4:先判斷a>3臣樱,成立靶擦;再判斷a<5,也成立雇毫。因此結(jié)果為1
? 若a的值是2:先判斷a>3玄捕,不成立,停止判斷棚放。因此結(jié)果為0
? 因此枚粘,如果a的值在(3, 5)這個范圍內(nèi),結(jié)果就為1飘蚯;否則馍迄,結(jié)果就為0
5> 注意
? 若想判斷a的值是否在(3, 5)范圍內(nèi),千萬不能寫成
3<a<5孝冒,因為關(guān)系運算符的結(jié)合方向為“從左往右”柬姚。
比如a為2,它會先算3<a庄涡,也就是3<2量承,條件不成立,結(jié)果 為0穴店。再與5比較撕捍,即0<5,條件成立泣洞,結(jié)果為1忧风。
因此 3<a<5的結(jié)果為1,條件成立球凰,也就是說當(dāng)a的值為2時狮腿,a的值是在(3, 5)范圍內(nèi)的。這明顯是不對的呕诉。
正確的判斷方法是:(a>3) && (a<5)
? C語言規(guī)定:任何非0值都為“真”缘厢,只有0才為“假”。
因此邏輯與也適用于數(shù)值甩挫。比如 5 && 4的結(jié)果是1贴硫,為“真”;
-6 && 0的結(jié)果是0,為“假”
2英遭、|| 邏輯或
1> 使用格式
“條件A || 條件B”
2> 運算結(jié)果
當(dāng)條件A或條件B只要有一個成立時(也包括條件A和條件B都成立)间护,
結(jié)果就為1,也就是“真”挖诸;只有當(dāng)條件A和條件B都不成立時汁尺,
結(jié)果才為0,也就是“假”税灌。
3> 運算過程
總是先判斷條件A是否成立
? 如果條件A成立均函,就不會再去判斷條件B是否成立:因為條件A已經(jīng)成立了,不管條件B如何菱涤,“條件A || 條件B”的結(jié)果肯定是1苞也,也就是“真”
? 如果條件A不成立,接著再判斷條件B是否成立:如果條件B成立粘秆,“條件A || 條件B”的結(jié)果就為1如迟,即“真”,如果條件B不成立攻走,結(jié)果就為0殷勘,即“假”
4> 舉例
邏輯或的結(jié)合方向是“自左至右”。比如表達式 (a<3) || (a>5)
? 若a的值是4:先判斷a<3昔搂,不成立玲销;再判斷a>5,也不成立摘符。因此結(jié)果為0
? 若a的值是2:先判斷a<3贤斜,成立,停止判斷逛裤。因此結(jié)果為1
? 因此瘩绒,如果a的值在(-∞, 3)或者(5, +∞)范圍內(nèi),結(jié)果就為1带族;否則锁荔,結(jié)果就為0
5> 注意
C語言規(guī)定:任何非0值都為“真”,只有0才為“假”蝙砌。
因此邏輯或也適用于數(shù)值阳堕。比如 5 || 4的結(jié)果是1,
為“真”择克;-6 || 0的結(jié)果是1嘱丢,為“真”;0 || 0的結(jié)果是0祠饺,為“假”
5、 邏輯非
1> 使用格式
“! 條件A”
2> 運算結(jié)果
其實就是對條件A進行取反:若條件A成立汁政,結(jié)果就為0道偷,即“假”缀旁;若條件A不成立,結(jié)果就為1勺鸦,即“真”并巍。也就是說:真的變假,假的變真换途。
3> 舉例
邏輯非的結(jié)合方向是“自右至左”懊渡。比如表達式 ! (a>5)
? 若a的值是6:先判斷a>5,成立军拟,再取反之后的結(jié)果為0
? 若a的值是2:先判斷a>3剃执,不成立,再取反之后的結(jié)果為1
因此懈息,如果a的值大于5肾档,結(jié)果就為0;否則辫继,結(jié)果就為1
4> 注意
? 可以多次連續(xù)使用邏輯非運算符:!(4>2)結(jié)果為0怒见,
是“假”,!!(4>2)結(jié)果為1姑宽,是“真”遣耍,!!!(4>2)結(jié)果為0,是“假”
? C語言規(guī)定:任何非0值都為“真”炮车,只有0才為“假”舵变。
因此,對非0值進行邏輯非!運算的結(jié)果都是0示血,對0值進行邏輯非!運算的結(jié)果為1棋傍。
!5、!6.7难审、!-9的結(jié)果都為0瘫拣,!0的結(jié)果為1
4.優(yōu)先級
? 邏輯運算符的優(yōu)先級順序為: 小括號() > 負號 - > ! > 算術(shù)運算符 > 關(guān)系運算符 > && > ||
? 表達式!(3>5) || (2<4) && (6<1) :先計算 !(3>5)、(2<4)告喊、(6<1)麸拄,結(jié)果為1,式子變?yōu)? || 1 && 0黔姜,再計算1 && 0拢切,式子變?yōu)? || 0,最后的結(jié)果為1
? 表達式3+2<5||6>3 等價于 ((3+2) < 5) || (6>3)秆吵,結(jié)果為1
? 表達式4>3 && !-5>2 等價于 (4>3) && ((!(-5)) > 2) 淮椰,結(jié)果為0
5、 三目運算符
N目運算符->三目運算符
? int a = 5?10:2;
? 獲得a、b中的最大數(shù)
? 獲得a主穗、b泻拦、c中的最大數(shù)
先運行?左側(cè)忽媒,如果成立則取?右邊的值争拐,如果失敗則是右邊的右邊