表達式基礎

文章目錄

  • 1、表達式組成
    • 1、運算符
  • 2、表達式的分類
    • 1、算數運算符
      • 1、自增運算符和自減運算
      • 2、取余運算(%)
      • 3、除法運算(/)
      • 4、案例
    • 2、關系運算符
    • 3、邏輯運算符
    • 4、條件運算符(三目運算符)
      • 1、案例
    • 5、賦值運算(=)
      • 1、賦值類型轉換
      • 2、復合賦值運算
    • 6、逗號運算
    • 7、取地址運算(&)
    • 8、計算變量占用幾個字節(sizeof)
    • 9、位運算(二進制運算)
      • 1、按位取反
      • 2、按位與運算(&)
      • 3、按位或運算(|)
      • 4、按位異或運算(^)
      • 5、左移位運算(<<)
      • 6、右移位運算(>>)
  • 3、運算的優先級與結合性

1、表達式組成

1、運算符

  • 根據運算符的操作個數分為單目,雙目,三目

  • a++ 單目運算

  • a+b 雙目運算

  • ?表1;表2 三目運算

img

2、表達式的分類

1、算數運算符

img

1、自增運算符和自減運算

  • a++ ++a,自增1

  • ++i 先增加1,然后再使用

  • i++ 先使用i的值,然后增加+1,先用,后使用

  • 跟的是一個變量,不能是表達式,常量

  • –i,++i都用完之后才能加,也就是語句

#include<stdio.h>
void main()
{int a = 1 ,b=2,c;c = ++a*b;printf("%d,%d",c,a);
}# tc版本
# 掃描整個表達式 ,i=1
(++i)+(++i)+(++i)# 所以i=4 ,結果為3*4 = 12# vc版本# 只能先算后面2個表達式# i =  3  3+3+(++i) = 6+4=10# 編譯器的不同
#include<stdio.h>
void main()
{int i,j;i=j=5;printf("i++=%d,j--=%d\n",i++,j--);printf("++i=%d,++j=%d\n",++i,--j);printf("i++=%d,j--=%d\n",i++,j--);printf("++i=%d,++j=%d\n",++i,--j);printf("i=%d,j=%d\n",i,j);
}

2、取余運算(%)

  • %要求參與運算的2個量必須是整型,不能有實型(小數),實型數據不能做%運算

  • 可以判斷是不是偶數

  • 正負號取決于被除數

  • 5%(-2) = 1 ,(-5)%2 = -1

  • 0取余任何數據結果都為0

int a = 10,b;
b = a%3;  # %的優先級高于= ,先算右邊的,= 的結合性自右向左的,賦值給b
printf("%d",b);

3、除法運算(/)

  • 如果有小數參與,得到的就是小數

  • 如果均為整數參與運算,得到的就是整數

4、案例

3.5+1/2+56%10345取出個位,十位,百分位

2、關系運算符

  • 也就是條件運算

  • 關系運算符,低于算數運算符,高于邏輯運算

  • 1代表的真,0代表的為假

5 > 3 的結果為真,值為13<7<5# 先算從往右算,1<5成立,為真,1

3、邏輯運算符

  • 非0代表真,0代表假

  • && 邏輯與,2邊都為真,就為真

  • || 邏輯或,有一個為真,則為真

  • !邏輯非 為真結果就為假,運算的優先級高于上面的&&,|| ,因為是單目運算符

  • !>&&>|| 低于關系運算符,高于賦值運算符

  • && 只要表達式的值能夠確定,就不在計算下去了

  • || 可以確定整個表達式的值為假時,剩下的表達式部分邊不在計算

#include<stdio.h>
void main()
{int a=3,b=5,c=7,d;d = a >5&&b--||c++;printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d);}# 3581
# 如果能確定值的話,剩下的表達式就不用算了
  • 邏輯表達式描述條件
# x是3的倍數x%3==0# x是偶數x%2==0# x是3的倍數并且是偶數(x%3==0)&&(x%2==0)# 三位數x是回文數,121,首尾相等x/100 == x%10# abc為三邊,構成等邊三角形(a==b)&&(b==c)# 某年是閏年
# 能夠被4整除,并且不能被100整除或者可以被400整除((year%4==0)&&(year%100!=0))||(year%400==0)#include<stdio.h>
void main()
{int x,y,z,t;x=y=z=1;t = ++x||++y&&++z;printf("x=%d,y=%d,z=%d,t=%d",x,y,z,t);	
}# 先算++x 為真 ,||后面的就不用算了,短路的特性# 因為·單目運算符的優先級高于|| ,所以的話,先算出++x > 0 ,因此后面就不用算了

4、條件運算符(三目運算符)

  • ?和;組成

  • 三目運算符

  • 表達式1?表達式2:表達式3

  • 表達式1為真執行表達式2,否則執行表達式3

  • 表達式1必須是判斷的,有一個真假的值

  • 條件運算,優先級高于賦值運算和逗號運算

  • 從右往左算

a>b?a:c>d?c:d# 先算右邊的再算左邊的
a>b?a:(c>d?c:d)

1、案例

  • 比較2個數的誰打誰小
a?a:b# 如果a>b輸出a# 如果a<b輸出b 這個就是求出了最大值
  • 求a的絕對值
a>0?a:-a# 如果a>0,就輸出a# 如果a<=0,就輸出-a,也就是絕對值
  • 輸入一個字母,以小寫的形式輸出
# 'A'和'Z'之間的范圍,就是大寫字母
#include<stdio.h>
void main()
{char ch;scanf("%c",&ch);ch = (65<=ch<97)?ch+32:ch;printf("%c",ch);
}

5、賦值運算(=)

  • 右結合性,算右邊的

  • = 左邊的操作數只能是變量

1、賦值類型轉換

  • 實型數據賦給整型,舍棄小數部分,不是四舍五入

  • 將整型數據賦給單雙精度時,數值大小不變,以浮點形式存儲

  • 字符型數據賦值給整型變量時,由于字符只占一個字節,整形占2個字節,因此字符型數據放在整型變量的低8位中,這樣數據就不會發生改變了,高八位補0即可

  • 基本整形數據賦給長整型變量時,基本整形數據放在長整型變量低16位中,反之長整型賦給基本整形變量時,只將長整型數據的低16位送給基本整形變量,正數用0補全,負數用1來補全

img

2、復合賦值運算

  • +=,-=,*=,/= %=

  • 變量? = 表達式 = 等價于 變量=變量?表達式

#include<stdio.h>
void main()
{int a = 3;a+=a*=a+1;printf("%d",a);
}# 右結合性

6、逗號運算

  • 優先級是最低的

  • 從左往右算

  • 表達式1,表達式2,表達式3,表達式n 表達式n就是最終的結果

  • 自增和自減遇到逗號立刻完成

  • 賦值運算高于逗號運算

x=a=3,6*x,6*a,a+x# 最后的結果為6,a與x的結果沒有變x=3,x++,x+2;# x++,這個時候x=4,表達式最后的結果為6
# x的值為4

7、取地址運算(&)

  • 變量存儲在內存中,這個&就能求出這個地址

8、計算變量占用幾個字節(sizeof)

#include<stdio.h>
void main()
{printf("%d\n",sizeof(char)); # 占一個字節printf("%d\n",sizeof("qwer")); # 輸出5個字節,\0
}

9、位運算(二進制運算)

1、按位取反

  • 運算符 ~

  • 右結合性

  • 將一個二進制按位取反,0變1,1變0

~25
0000000000011001 # 25的二進制1111111111100110 # ~25 先按位取反1000000000011001 # 取反碼1000000000011010 # ~25的補碼 按位取反后為-26

2、按位與運算(&)

  • 都是1就是1,有0就是假

  • 1&任何數 都是那個數

0x29&0x37
00101001 
0011011100100001 # 得到的結果為0x21

3、按位或運算(|)

  • 有一個1就是真

4、按位異或運算(^)

  • 相同為0,不同為1

5、左移位運算(<<)

  • 對左邊的操作進行移位,右邊操作數是移動的位數

  • 左移的話相當于乘以2^n

  • 空出的為補0

15<<2
1111
111100 # 移動之后的為60

6、右移位運算(>>)

  • 除以2^n取整
15>>2
1111
11.11 # 后面的11被舍棄了為3

3、運算的優先級與結合性

  • * 是指針運算符,就是單目的

  • 如果是乘號,就是雙目運算符

img

  • 單目運算符和賦值運算符,從右到左

  • 大多數都是從左往右進行計算

  • 從左往右看2個運算符,比較幾個運算符的優先級

  • 當前面的高于后面的,直接算前面一個

  • 當后面高于前面的,繼續向后比較

  • 真就是1,假就是0,看的是結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72513.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72513.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72513.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

除了合并接口,還有哪些優化 Flask API 的方法?

除了合并接口&#xff0c;還有許多其他方法可以優化 Flask API&#xff0c;以下從性能優化、代碼結構優化、安全性優化、錯誤處理優化等方面詳細介紹&#xff1a; 性能優化 1. 使用緩存 內存緩存&#xff1a;可以使用 Flask-Caching 擴展來實現內存緩存&#xff0c;減少對數…

Web服務器配置

配置虛擬主機 通過虛擬主機&#xff0c;可以實現用自定義的域名來訪問&#xff0c;并且可以為不同的域名指定不同的站點目錄。 配置IP地址和域名的映射關系 申請真實的域名需要一定的費用&#xff0c;為了方便開發&#xff0c;可以通過修改hosts文件來實現將任意域名解析到本…

爬蟲逆向實戰小記——解決webpack實記

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX網站實例僅作為學習案例&#xff0c;禁止其他個人以及團體做謀利用途&#xff01;&#xff01;&#xff01; aHR0cHM6Ly9wbW9zLnhqLnNnY2MuY29tLmNuOjIwMDgwL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi8jL3B4Zi1zZXR0bGVtZW5…

藍橋杯 之 前綴和與查分

文章目錄 題目求和棋盤挖礦 前綴和有利于快速求解 區間的和、異或值 、乘積等情況差分是前綴和的反操作 前綴和 一維前綴和&#xff1a; # 原始的數組num,下標從1到n n len(num) pre [0]*(n1) for i in range(n):pre[i1] pre[i] num[i] # 如果需要求解num[l] 到num[r] 的區…

Windows10下本地搭建Manim環境

文章目錄 1. 簡介2. Python環境3. uv工具4. Latex軟件5. 安裝Manim數學庫6. 中文支持參考 1. 簡介 manim是個一科普動畫的庫&#xff0c; 本文用到的是社區版本。 2. Python環境 這個不用多說&#xff0c;可以參考其他的文章。記得把pip也安上。 3. uv工具 上面的pip是老…

#UVM# 關于field automation機制中的 pack_bytes 和unpack_bytes 函數剖析

一 pack_bytes 函數 在 UVM 中,pack_bytes 函數用于將類中的所有字段打包成一個字節流(byte stream)。這是 UVM 提供的字段自動化(field automation)機制的一部分,用于簡化數據打包和傳輸。 extern function int pack_bytes(ref byte unsigned bytestream[], input uv…

YOLOv8 自定義目標檢測

一、引言 YOLOv8 不僅支持預訓練模型的推理&#xff0c;還允許用戶將其應用于自定義對象檢測。本文將詳細介紹如何使用 YOLOv8 訓練一個新的模型&#xff0c;并在自定義數據集上進行對象檢測。 二、數據集準備 1. 數據集格式 YOLOv8 支持多種數據集格式&#xff0c;包括 CO…

關于tresos Studio(EB)的MCAL配置之GPT

概念 GPT&#xff0c;全稱General Purpose Timer&#xff0c;就是個通用定時器&#xff0c;取的名字奇怪了點。定時器是一定要的&#xff0c;要么提供給BSW去使用&#xff0c;要么提供給OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否啟用 GptEnableDisable…

Dify 開源大語言模型應用開發平臺使用(一)

文章目錄 一、創建鋰電池專業知識解答應用1.1 應用初始化 二、核心功能模塊詳解2.1 知識庫構建2.2 工作流與節點編排節點類型說明工作流設計示例&#xff1a;鋰電池選型咨詢 2.3 變量管理 三、測試與調試3.1 單元測試3.2 壓力測試3.3 安全驗證 四、部署與優化建議4.1 部署配置4…

《Java基礎 聊天窗口案例:剖析 GUI、文件 I/O 等關鍵技術知識》

1. 面向對象編程 類與對象&#xff1a;代碼中定義了 Chat 類&#xff0c;它是整個程序的核心&#xff0c;封裝了與聊天窗口相關的屬性和方法。在 main 方法中創建了 Chat 類的對象&#xff0c;并調用其方法來完成相應的功能。繼承與多態&#xff1a;ButtonClickListener 類實現…

IDE集成開發環境MyEclipse中安裝SVN

打開Myeclipse的help菜單----install from site 點擊add彈出對話框 在輸入框中輸入對應內容 http://subclipse.tigris.org/update_1.10.x 點擊OK之后&#xff0c;會刷新出兩個選項&#xff0c;需要選中的 點擊next&#xff0c;出現許可的時候選中同意&#xff0c;一直結束等…

歸并排序:分治哲學的完美演繹與時空平衡的藝術

引言&#xff1a;跨越世紀的算法明珠 在計算機科學的璀璨星河中&#xff0c;歸并排序猶如一顆恒久閃耀的明星。1945年&#xff0c;現代計算機之父馮諾伊曼在EDVAC計算機的研發過程中首次系統性地提出了這一算法&#xff0c;其精妙的分治思想不僅奠定了現代排序算法的理論基礎&…

服務器CPU微架構

1、微架構圖 前端&#xff1a;預解碼、解碼、分支預測、L1指令緩存、指令TLB緩存 后端&#xff1a;順序重排緩存器ROB處理依賴&#xff0c;調度器送到執行引擎 執行引擎&#xff1a;8路超標量&#xff0c;每一路可以進行獨立的微操作處理 Port0、1、5、6支持整數、浮點數的加…

SpringBoot調用DeepSeek

引入依賴 <dependency><groupId>io.github.pig-mesh.ai</groupId><artifactId>deepseek-spring-boot-starter</artifactId><version>1.4.5</version> </dependency>配置 deepseek:api-key: sk-******base-url: https://api.…

【前端基礎】Day 9 PC端品優購項目

目錄 1. 品優購項目規劃 1.1 網站制作流程 1.2 品優購項目整體介紹 1.3 學習目的 1.4 開發工具以及技術棧 1.5 項目搭建工作 1.6 網站favicon圖標 1.7 網站TDK三大標簽SEO優化 2. 品優購首頁制作 2.1 常見模塊類命名 2.2 快捷導航shortcut制作 2.3 header制作 2.4…

OpenMCU(一):STM32F407 FreeRTOS移植

概述 本文主要描述了STM32F407移植FreeRTOS的簡要步驟。移植描述過程中&#xff0c;忽略了Keil軟件的部分使用技巧。默認讀者熟練使用Keil軟件。本文的描述是基于OpenMCU_FreeRTOS這個工程&#xff0c;該工程已經下載放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…

NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo

NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo創建一個基于CIFLog平臺的應用系統1. 下載安裝CIFLog2. 授權使用3. 解決本地機器碼驗證錯誤問題4. 創建一個基于CIFLog平臺的應用系統&#xff08;1&#xff09;新建項目&#xf…

ESP8266連接網絡實時上傳數據

要實現這個功能,可以按照以下步驟進行編程。我們將使用Arduino IDE來編寫代碼,并結合ESP8266的WiFi庫、MQTT庫以及Web服務器庫來實現。 1. 準備工作 硬件:ESP8266開發板、溫度傳感器(如DS18B20)、顯示屏(如OLED)。軟件:Arduino IDE、ESP8266庫、PubSubClient庫(MQTT)…

pytest中pytest.ini文件的使用

pytest.ini 是 pytest 測試框架的配置文件,它允許你自定義 pytest 的行為。通過在 pytest.ini 中設置各種選項,可以改變測試用例的發現規則、輸出格式、插件行為等。以下詳細介紹 pytest.ini 文件的使用。 1. 文件位置 pytest.ini 文件通常位于項目的根目錄下,pytest 在運…

MARL零樣本協調之Fictitious Co-Play學習筆記

下列引用來自知乎作者Algernon 知乎link FCP作為ZSC領域兩階段訓練方法的開創者 論文《Collaborating with Humans without Human Data》來自 NeurIPS 2021。這篇論文提出 Fictitious Co-Play (FCP) 來解決 ZSC 問題。論文認為&#xff0c;ZSC 的第一個重要問題是對稱性&#x…