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
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...