shell逻辑运算符优先级_ios从入门到放弃之C基础巩固运算符
繼續接著上一次ios從入門到放棄之C基礎鞏固-----printf函數、scanf函數、scanf函數實現原理來鞏固C語言基礎,這次學習的是一個非常不起眼的語言基礎----運算符,這里主要是對一些比較容易犯錯的給拎出來再復習一下,于我而言是有用的,所以即使容易也不厭其煩的來好好復習~~
運算符:
算術運算符:
%取模運算:
1、兩側必須都為整數:
2、?利用%求出來的余數是正數還是負數,由%左邊的被除數決定,被除數是正數,余數就是正數,反之則反。
3、如果取模運算的左邊小于右邊,那么結果就是左邊。
類型轉換問題:
1、自動類型轉換(隱式轉換):?
對應的就還有一個顯示轉換,這塊就不過多說明了,基本上好多語言都有。
2、自動類型提升:
其中這里有個細節:算術運算符規定只有相同類型的數據才可以進行運算,那對于咱們這個例子很明顯10是整型,9.0是小數類型,數據類型不一樣,那最終咋又能運算了呢?其實是通過類型提升來達到計算的目的的,如下:
也就是會將小類型int自動轉成大類型double,然后再進行運算。
3、參與運算的操作數是什么類型,那么計算出來的結果就是什么類型
而要想如預期,這樣做就可以了:
?
根本原因還是由于在運算時發現這兩操作數不一樣,而根據“算術運算符規定只有相同類型的數據才可以進行運算”的原則,會自動將2提升為2.0,然后操作數都為double類型之后,那最終的計算結果不就為double了么?所以結果就如預期啦。
另外還有一種做法就是顯示轉換類型也可以達到相同的效果:
這里有一個比較容易犯錯誤的寫法:
賦值運算符:
這里注意這一點既可:
標紅的其實是這么算的:int number =? number + (2 * 3 * 4),而不要理解成:int number =? (number + 2) * 3 * 4。
自增自減:
關于這塊最需要注意的就是自增放在變量前和變量后的區別了,先看一下表描述了其區別:
下面擼一擼這塊:
可以看到a++整個表達式賦值給b時并未累加的,還是10,接下來再改一下:
總的來說是:++在前,先自增再去處;++在后,先運算再自增。
下面再來繼續鞏固一下這塊的知識,操練一下:
這結果有疑問么?下面來簡單分析一下:
所以結果就如輸出的所示了。?下面再來改一下:
這塊也比較好理解,就不過多解釋了,都是同一個套路。繼續:
sizeof運算符:
sizeof可以用來計算一個變量或一個常量、一種數據類型所占的內存字節數,注意:sizeof不是一個函數,它是一個運算符哈【面試可能會被問到】~~
下面來使用一下:
此時對于sizeof還有另一種寫法:
下面再來看一下變量的情況:
接下來還可以計算數據類型占的字節數:
這里有一個注意點:如果計算的是數據類型,其()是不能省略的哈~~
逗號運算符:
在C語言中逗號“,”也是一種運算符,稱為逗號運算符。其功能是把多個表達式連接起來組成一個表達式,稱為逗號表達式。
下面來使用一下:
我們知道只要是運算符那么一定會有運算結果的對吧?那逗號運算符也不例外,它的結果是最后一個表達式的結果,下面來驗證一下:
但是上面這種僅作了解,實際工作基本上用不到~~唯一用得到的可能是面試~~
關系運算符:
C語言的真假性:
C語言規定,任何數值都有真假性,任何非0值都為“真”,只有0才為“假”。也就是說,108、-18、4.5、-10.5等都是“真”,0則是“假”。
這塊就不像java那樣,true和false來表示真假了。
關系運算符的優化級:
優化級規則為:>、=、<= 優先級大于 ==、!=,下面舉個栗子:
另外算數運算符的優化級大于關系運算符,再來看一下:
關系運算符的結合性:
關系運算符都是雙目運算符,其結合性均為左結合。例如4>3>2:先算4>3,條件成立,結果為1。再與2比較,即1>2,條件不成立,結果為0。因此4>3>2的結果為0。試一下:
那如果優先級和結合性同時存在呢?此時是先執行優先級,再執行結合性,比如:
。。這有點暈呀,這個只是為了學習才會故意這么整的,實際工作基本上不會這樣寫的,下面來簡單分析一下結果為啥是1:
所以此時式子就變為int result = 11 > 9 == 3 > 1;接下來全是關系運算符了,很明顯>要優先級==,按照相同關系運算符結合性是從左至右的原則,所以此時又可以變為:1 == 1,最終結果當然就是1啦。
其實對于這樣的規則不用記,對于需要優先執行的用圓括號括起來你就清晰明了不容易犯錯了,比如對于這個復雜的代碼這樣改一下:
邏輯運算符:
C語言中提供了三種邏輯運算符:
關于邏輯運算符值得說明就是可以直接跟數字進行計算,因為C語言中任何數字都有真假性,非0既真,所以這塊是跟Java不太一樣的,試一下:
另外對于非運算,可以多次非,啥意思?
它的結合性是從右至左,也就是從右邊開始算起。?
優先級:
整體的優先級是這么個順序:
邏輯非優先級:
等于先計算!0等于1,然后再計算+1=2。
算術運算符與邏輯運算符優先級:
因為算法運算優先級大于邏輯運算,所以是6 && 1= 1。
關系運算符與邏輯運算符優先級:
關系運算符的優先級大于邏輯運算符,其結果也比較好算出來。
短路問題:
關于短路特性應該是人人皆知了,下面復習一下:
1、與短路:&& 只要第一個條件表達為假那么后面的條件表達就不參與運算了
2、或短路:|| 只要第一個條件表達式為真那么后面的條件表達式就不參與運算了
三目運算符:
這塊有兩點注意點:
1、三目運算符的結合方向是從右到左,下面看個例子:
2、三目運算符的運算優先級低于關系運算符和算術運算符,但高于賦值符。例子如下:
?
if條件:
注意點:
這里有啥可說的呢,嗯,就說一點:
這個在Java肯定是可行的,這是因為在C中如果在if后面定義變量其定義語句一定得要寫在{}當中,如下:
操練:利用if寫一個石頭剪子布的小游戲
規則:
平常我們都是人與人進行此游戲的玩法,這里當然就是人機交換嘍,規則簡單來說是這樣的:
有兩個角色:玩家和電腦;
兩個角色都可以出,0代表石頭;1代表剪子;2代表布;
玩家的出拳可以讓用戶自己輸入;
電腦的出拳必須生產一個隨機數,如何產生隨機數呢?
最后再將玩家的出拳和電腦的出拳進行比較,得出比賽結果,其判斷結果的條件有如下三個:
那結果就是我贏了【我出的大,電腦出的小】、我輸了【我出的小,電腦出的大】、平局【我和電腦出的是一樣的】。
實現:
對于這種小邏輯就不過多說明了,擼就對了。
1、先定義玩家和電腦角色:
2、先讓電腦出拳:
這里需要從0、1、2中隨機出一個數字,那在C中隨機數咋出呀,其實有現成的函數了,如下:
?
注意需要導入一個頭文件才行:
3、用戶出拳:
4、結果比較:
#include #include int main(int argc, const char * argv[]) { /* 實現石頭剪刀布邏輯 */ // 定義 0.剪刀 1.石頭 2.布 // 1、定義變量 玩家和電腦 int player,computer=0; // 2、讓電腦先出拳 //隨機出拳 //如何進行隨機出拳,借助一個stdlib.h下一個產生隨機數的函數 // arc4random_uniform(n) 0~n-1之間的隨機的整數 computer = arc4random_uniform(3); //0 1 2,跟Java的Random.nextInt()差不多 // 3、用戶出拳 printf("請出拳:0.剪刀 1.石頭 2.布\n"); scanf("%d",&player); // 數據合法性的校驗 if (player<0||player>2) { printf("非法的輸入"); return 0; } // 4、判斷比較 //先判斷用戶贏的情況 if((player==0&&computer==2)|| (player==1&&computer==0)|| (player==2&&computer==1)){ printf("我靠,你贏了!\n"); }else if((computer==0&&player==2)|| (computer==1&&player==0)|| (computer==2&&player==1)){ printf("很遺憾,你輸了!\n"); }else{ printf("平局\n"); } printf("player = %i, computer = %i\n", player, computer); return 0;}運行:
先學到這邊,對于老手來說學習這些這么簡單的有點浪費時間,對于我而言細節不怕簡單,就怕遺漏細節,腦子笨~~
總結
以上是生活随笔為你收集整理的shell逻辑运算符优先级_ios从入门到放弃之C基础巩固运算符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu1804系统设置在哪里_新风
- 下一篇: crt中 新建的连接存储在哪_连接昌邑路