C 語言運算符

来源:https://www.cnblogs.com/knhap/archive/2022/06/13/16371788.html
-Advertisement-
Play Games

算術運算符 +:正值運算符 / 加法運算符 int x = 4 + 22; -:負值運算符 / 減法運算符 int y = 61 - 23; *:乘法運算符 int num = 5; printf("%i\n", num * num); // 輸出 25 /:除法運算符 C 語言裡面的 整數除法 是 ...


image

算術運算符

  • +:正值運算符 / 加法運算符
int x = 4 + 22;
  • -:負值運算符 / 減法運算符
int y = 61 - 23;
  • *:乘法運算符
int num = 5;
printf("%i\n", num * num); // 輸出 25
  • /:除法運算符

C 語言裡面的 整數除法 是整除,只會返回整數部分,丟棄小數部分。

float x = 6 / 4;
printf("%f\n", x); // 輸出 1.000000

如果希望得到浮點數的結果,兩個運算數必須至少有一個浮點數。

float x = 6.0 / 4; // 或者寫成 6 / 4.0
printf("%f\n", x); // 輸出 1.500000
  • %:取模運算符

返回兩個整數相除的餘數,這個運算符只能用於整數,不能用於浮點數

int x = 6 % 4; // 2

負數求模的規則是,結果的正負號由第一個運算數的正負號決定。

11 % -5 // 1
-11 % -5 // -1
-11 % 5 // -1
  • ++:自增運算符

++var是先執行自增操作,再返回操作後var的值;var++則是先返回操作前var的值,再執行自增操作。

int i = 42;
int j;

j = (i++ + 10); // i: 43 j: 52
j = (++i + 10) // i: 44 // j: 54
  • --:自減運算符

--var是先執行自減操作,再返回操作後var的值;var++則是先返回操作前var的值,再執行自減操作。

關係運算符

  • > 大於運算符
  • < 小於運算符
  • >= 大於等於運算符
  • <= 小於等於運算符
  • == 相等運算符
  • != 不相等運算符

關係表達式通常返回01,表示真偽。0表示偽,所有非零值表示真。比如,20 > 12返回112 > 20返回0

註意,不要將相等運算符 == 寫成 =

// 這個式子表示對變數 x 賦值 3,它的返回值為 3,所以 if 判斷總是為真。
// 為了防止出現這種錯誤,可以將變數寫在等號的右邊。
if (x = 3) {}

多個關係運算符不宜連用。

i < j < k ,通常達不到想要的結果,不是保證變數j的值在ik之間,實際執行的是 (i < j) < k

邏輯運算符

對邏輯運算符來說,任何非零值都表示真,零值表示偽。如,5 || 0返回15 && 0返回0

  • &&:短路與運算符(兩側的表達式都為真,則為真,否則為偽)。

如果左邊的表達式為偽,就不再對右邊的表達式求值。

if (x < 10 && y > 20)
  printf("Doing something!\n");
  • ||:短路或運算符(兩側至少有一個表達式為真,則為真,否則為偽)。

如果左邊的表達式為真,就不再對右邊的表達式求值。

  • !:非運算符(改變單個表達式的真偽)。

位運算符

  • :按位取反

將值的二進位按位變成相反值,0 變成 1,1 變成 0,符號位(首位)參與運算。

// 0000 0010
char a = 2; 
// 1111 1101,負數補碼符號位不變,其他位取反加 1,得原碼 1000 0010,結果為 -3
char b = ~ a; 
  • &:與運算

將兩個值的二進位按位進行比較,返回一個新值,當兩個二進位位都為 1,就返回 1,否則返回 0,符號位(首位)參與運算,與運算符 & 可以與賦值運算符 = 結合,簡寫成 &= 。

char a = -2; // 1111 1110 
char b = 1; // 0000 0001
char c = a & b; // 0000 0000,結果為 0
  • |:或運算

將兩個值的二進位按位進行比較,返回一個新值,當兩個二進位位都為 0,就返回 0,否則返回 1,符號位(首位)參與運算,或運算符 | 可以與賦值運算符 = 結合,簡寫成 |=。

char a = -2; // 1111 1110 
char b = 1; // 0000 0001
// 1111 1111,負數補碼符號位不變,其他位取反加 1,得原碼 1000 0001,結果為 -1
char c = a | b; 
  • ^:異或運算

將兩個值的二進位按位進行比較,返回一個新值,當兩個二進位位不同時,就返回 1,否則返回 0,符號位(首位)參與運算,異或運算符 ^可以與賦值運算符 = 結合,簡寫成 ^=。

char a = -2; // 1111 1110 
char b = 1; // 0000 0001
// 1111 1111,負數補碼符號位不變,其他位取反加 1,得原碼 1000 0001,結果為 -1
char c = a ^ b; 
  • <<:左移運算

將左側運算數的二進位向左移動指定的位數,頭部無法容納的值丟棄,尾部空出來的位置使用 0 填充,符號位(首位)參與運算,左移運算符 << 可以與賦值運算符 = 結合,簡寫成 <<=。

char a = 1; // 0000 0001
a = a << 2; // 0000 0100,結果為 4

char b = 33; // 0010 0001
// 1000 0100,負數補碼符號位不變,其他位取反加 1,得原碼 1111 1100,結果為 -124
b = b << 2;
  • >>:右移運算

將左側運算數的二進位向右移動指定的位數,尾部無法容納的值丟棄,頭部空出來的位置,使用符號位填充。

右移運算符最好不要用於負數,因為不同系統對於右移後如何處理負數的符號位,有不同的做法,可能會得到不一樣的結果。

右移運算符 >> 可以與賦值運算符 = 結合,簡寫成 >>=。

char a = 4; // 0000 0100
a = a >> 2; // 0000 0001,結果為 1

運算符優先順序

部分運算符的優先順序順序(按照優先順序從高到低排列)。

  • 圓括弧(()
  • 自增運算符(++),自減運算符(--
  • 一元運算符(+-
  • 乘法(*),除法(/
  • 加法(+),減法(-
  • 關係運算符(<>等)
  • 賦值運算符(=

如果兩個運算符優先順序相同,則根據運算符是左結合,還是右結合,決定執行順序。大部分運算符是左結合(從左到右執行),少數運算符是右結合(從右到左執行),比如賦值運算符(=)。

參考: C 語言教程


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 ​ 採集應用程式崩潰信息,主要分為以下兩種場景: ​ NSException 異常 ​ Unix 信號異常 一、NSException 異常 ​ NSException 異常是 Objective-C 代碼拋出的異常。在 iOS 應用程式中,最常見就是通過 @throw 拋出的異常。比如,常見 ...
  • 當用戶有跨語種交流或內容翻譯的需求時,應用需要能自動檢測文本的語種再進行翻譯。 HMS Core機器學習服務的語種檢測服務提供線上語種檢測和離線語種檢測,既支持檢測單語種文本,也支持檢測混合語種文本,涵蓋南非荷蘭語、阿拉伯語等百種語言。接入語種檢測服務,App可以輕鬆實現翻譯語種檢測、網頁語種檢測, ...
  • vue的虛擬dom和diff演算法 1.虛擬dom 虛擬dom,我的理解就是通過js對象的方式來具體化每一個節點,把dom樹上面的每個節點都變為對象里的一個元素,元素的子元素變為子節點,節點上面的class、id、attribute等屬性變為data內的值,然後通過dom上面的createElemen ...
  • 一、問題描述 使得填表單位那一行字與下麵的表格左對齊,對錶格使用css中的margin:auto實現了居中,但是對那一行字(用div包裹的)使用margin:auto不生效;並且2021年下麵對應的月份是動態變化的,月份的個數不定; 二、解決方案 (1)把那行字放在表格裡,再把這行表格的邊框去掉; ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 對uni.request的一些共同參數進行簡單的封裝,減少重覆性數據請求代碼。方便全局調用。 先在目錄下創建 utils 和 common 這2個文件夾 utils 是存放工具類的,common 用來放置常用方法的 之後在utils 中創 ...
  • 聲明 這個程式只是用來演示查看後臺和對接後臺的原理和過程,供代碼學習參考,請勿濫用! 起因 因為上海疫情,我們所有的活動都得線上上完成,作為一個新時代好學生,我該做點什麼了。 我的學校選擇的上課平臺是希沃的立知課堂,教師端是希沃白板電腦客戶端,學生端是網頁端、微信小程式端、移動設備軟體端。 觀察後臺 ...
  • 日常開發系統中通常需要對接多個系統,需要用到適配器模式。 例如:支付方式就涉及多個系統對接。 國際慣例,先引入概念。 適配器模式: 提到適配器自然就能想到手機用的電源適配器。 他的作用就是將220V交流電轉換成手機使用的5V直流電。 適配器作用:將一個介面轉換成另外一個介面,已符合客戶的期望。 軟體 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...