C++ Primer 算術運算符

歡迎閱讀我的 【C++Primer】專欄

專欄簡介:本專欄主要面向C++初學者,解釋C++的一些基本概念和基礎語言特性,涉及C++標準庫的用法,面向對象特性,泛型特性高級用法。通過使用標準庫中定義的抽象設施,使你更加適應高級程序設計技術。希望對讀者有幫助!

在這里插入圖片描述
在這里插入圖片描述

目錄

  • 4.2算術運算符

4.2算術運算符

表4算術運算符(左結合律)

運算符功能用法
一元正號+ expr
一元負號- expr
*乘法expr * expr
/除法expr / expr
%求余expr % expr
+加法expr + expr
減法expr - expr

表4.1按照運算符的優先級將其分組。一元運算符的優先級最高,接下來是乘法和除法,優先級最低的是加法和減法。優先級高的運算符比優先級低的運算符組合得更緊密。上面的所有運算符都滿足左結合律,意味著當優先級相同時按照從左向右的順序進行組合。

除非另做特殊說明,算術運算符都能作用于任意算術類型以及任意能轉換為算術類型的類型。算術運算符的運算對象和求值結果都是右值。在表達式求值之前,小整數類型的運算對象被提升成較大的整數類型,所有運算對象最終會轉換成同一類型。

一元正號運算符、加法運算符和減法運算符都能作用于指針。己經介紹過二元加法和減法運算符作用于指針的情況。當一元正號運算符作用于一個指針或者算術值時,返回運算對象值的一個(提升后的)副本。

一元負號運算符對運算對象值取負后,返回其(提升后的)副本:

int i = 1024;
int k = -i; //k是-1024
bool b= true;
bool b2 = -b; //b2是true

布爾值不應該參與運算,-b就是一個很好的例子。

對大多數運算符來說,布爾類型的運算對象將被提升為int類型。如上所示,布爾變量b的值為真,參與運算時將被提升成整數值1,對它求負后的結果是-1。將-1再轉換回布爾值并將其作為b2的初始值,顯然這個初始值不等于0,轉換成布爾值后應該為1。所以,b2的值是真!

提示:溢出和其他算術運算異常:

算術表達式有可能產生未定義的結果。一部分原固是數學性質本身:例如除數是0的情況;另外一部分則源于計算機的特點:例如溢出,當計算的結樞超出試類型所能表示的范國時就會產生溢出。

假設某個機器的short類型占16位,則最大的shot敏值是32767。在這樣一臺機器上,下面的復合賦值語句將產生溢出:

short short_value=32767; //如果short類型占16位,則能表示的最大值是 32767
short_value+=1; //該計算導致溢出
cout << “short_value:<<short_value<<endl;

給short_value賦值的語句是未定義的,這是因為表示一個帶符號數32768需要17位,但是short類型只有16位。很多系統在編譯和運行時都不報溢出錯誤;像其他未定義的行為一樣,溢出的結果是不可預知的。在我們的系統中,程序的輸出結果是:


short_value : -32768

該值發生了“環繞(wrapped around),符號位本來是0,由于溢出被故成了1,于是結果變成一個負值。在別的系統中也許會有其他結果,程序的行為可能不同甚至直接崩潰。

當作用于算術類型的對象時,算術運算符+、~、*、/的含義分別是加法、減法、乘法和除法。整數相除結果還是整數,也就是說,如果商含有小數部分,直接棄除:

int ival = 21/6;//ival1是3,結果進行了刪節,余數被拋棄掉了
int ival2 = 21/7;// ival2是3,沒有余數,結果是整數值

運算符%俗稱“取余“或“取模“運算符,負責計算兩個整數相除所得的余數,參與取余運算的運算對象必須是整數類型:

int ival = 42;
double dval=3.14;
ival % 12; //正確:結果是6
ival % dval;//錯誤:運算對象是浮點類型

在除法運算中,如果兩個運算對象的符號相同則商為正(如果不為0的話),否則商為負。C++語言的早期版本允許結果為負值的商向上或向下取整,C++11新標準則規定商一律向0取整(即直接切除小數部分)。

根據取余運算的定義,如果m和n是整數且n非0,則表達式(m/n)*n+m%n 的求值結果與m相等。隱含的意思是,如果m%n不等于0,則它的符號和m相同。C++語言的早期版本允許m%n的符號匹配n的符號,而且商向負無窮一側取整,這一方式在新標準中已經被禁止使用了。除了-m導致溢出的特殊情況,其他時候(-m)/n和m/(-n)都等于-(m/n),m%(-n)等于m%n,(-m)%n等于-(m%n)。具體示例如下:

int ivall
int ival221%6;    /*結果是3*/  21/6;      /*結果是3*/
21%7;    /*結果是0*/  21/7;      /*結果是3*/
-21%-8;  /*結果是-5*/ -21/-8;    /*結果是2*/
21%-5;   /*結果是1 */ 21/5;      /*結果是-4*/

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

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

相關文章

【大數據技術】本機PyCharm遠程連接虛擬機Python

本機PyCharm遠程連接虛擬機Python 注意:本文需要使用PyCharm專業版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso寫在前面 本文主要介紹如何使用本地PyCharm遠程連接虛擬機,運行Python腳本,提高編程效率。 注意: …

堆(Heap)的原理與C++實現

1. 什么是堆&#xff1f; 堆&#xff08;Heap&#xff09;是一種特殊的樹形數據結構&#xff0c;通常用于實現優先隊列。堆可以分為兩種類型&#xff1a; 最大堆&#xff08;Max Heap&#xff09;&#xff1a;每個節點的值都大于或等于其子節點的值。最小堆&#xff08;Min H…

移除元素-雙指針(下標)

題目 給你一個數組 nums 和一個值 val&#xff0c;你需要 原地 移除所有數值等于 val 的元素。元素的順序可能發生改變。然后返回 nums 中與 val 不同的元素的數量。 假設 nums 中不等于 val 的元素數量為 k&#xff0c;要通過此題&#xff0c;您需要執行以下操作&#xff1a…

log4j2日志配置文件

log4j2配置文件每個項目都會用到,記錄一個比較好用的配置文件,方便以后使用時調取,日志輸出級別為debug,也可以修改 <?xml version"1.0" encoding"UTF-8"?> <Configuration monitorInterval"180" packages""><prope…

高等代數筆記—映射與線性空間

映射 映射&#xff1a; σ : M → M ′ \sigma: M \to M σ:M→M′ σ ( a ) a ′ , a ∈ M , a ′ ∈ M ′ \sigma(a)a, a\in M, a \in M σ(a)a′,a∈M,a′∈M′ a ′ a a′是 a a a在 σ \sigma σ下的像&#xff0c; a a a是 a ′ a a′在 σ \sigma σ下的原像 σ : …

提示詞實踐總結

目錄 一、要求創建SqlServer表&#xff08;ChatGpt&#xff09; 二、要求生成多層架構代碼&#xff08;Cursor&#xff09; 三、要求修改方法返回值類型&#xff08;Cursor&#xff09; 四、要求修改方法入參&#xff08;Cursor&#xff09; 五、復雜的多表關聯生成&#…

java進階文章鏈接

java 泛型&#xff1a;java 泛型詳解-絕對是對泛型方法講解最詳細的&#xff0c;沒有之一 Java 泛型&#xff0c;你了解類型擦除嗎&#xff1f; java 注解&#xff1a;深入理解Java注解類型 秒懂&#xff0c;Java 注解 &#xff08;Annotation&#xff09;你可以這樣學 jav…

MyBatis-Plus筆記-快速入門

大家在日常開發中應該能發現&#xff0c;單表的CRUD功能代碼重復度很高&#xff0c;也沒有什么難度。而這部分代碼量往往比較大&#xff0c;開發起來比較費時。 因此&#xff0c;目前企業中都會使用一些組件來簡化或省略單表的CRUD開發工作。目前在國內使用較多的一個組件就是…

Maven jar 包下載失敗問題處理

Maven jar 包下載失敗問題處理 1.配置好國內的Maven源2.重新下載3. 其他問題 1.配置好國內的Maven源 打開??的 Idea 檢測 Maven 的配置是否正確&#xff0c;正確的配置如下圖所示&#xff1a; 檢查項?共有兩個&#xff1a; 確認右邊的兩個勾已經選中&#xff0c;如果沒有請…

Spring 核心技術解析【純干貨版】- IX:Spring 數據訪問模塊 Spring-Jdbc 模塊精講

在現代企業級應用中&#xff0c;數據訪問層的穩定性和高效性至關重要。為了簡化和優化數據庫操作&#xff0c;Spring Framework 提供了 Spring-JDBC 模塊&#xff0c;旨在通過高度封裝的 JDBC 操作&#xff0c;簡化開發者的編碼負擔&#xff0c;減少冗余代碼&#xff0c;同時提…

探秘AI的兩大核心:決策式AI與生成式AI?

目錄 一、引言 二、從定義上來看 1. 決策式AI&#xff08;Discriminative AI&#xff09; 2. 生成式AI&#xff08;Generative AI&#xff09; 三、從技術原理上來看 1. 決策式AI&#xff08;Discriminative AI&#xff09; 2. 生成式AI&#xff08;Generative AI&#…

2.5學習

misc buuctf-假如給我三天光明 下載附件后得到了一個壓縮包和一個圖片&#xff0c;壓縮包為加密壓縮包&#xff0c;需要解出密碼&#xff0c;然后注意到這個圖片并非簡單的一個封面&#xff0c;在下方還有諸多點&#xff0c;有黑有灰。經過搜索&#xff0c;發現這是盲文通過與…

sed變量中特殊字符/處理方式

個人博客地址&#xff1a;sed變量中特殊字符/處理方式 | 一張假鈔的真實世界 如果變量值中包含斜杠&#xff08;/&#xff09;特殊字符&#xff0c;在使用sed命令的做行內字符串替換時可以使用井號&#xff08;#&#xff09;做為sed語法分隔符&#xff0c;如下&#xff1a; G…

java進階1——JVM

java進階——JVM 1、JVM概述 作用 Java 虛擬機就是二進制字節碼的運行環境&#xff0c;負責裝載字節碼到其內部&#xff0c;解釋/編譯為對 應平臺上的機器碼指令行&#xff0c;每一條 java 指令&#xff0c;java 虛擬機中都有詳細定義&#xff0c;如怎么取操 作數&#xff0c…

搭建集成開發環境PyCharm

1.下載安裝Python&#xff08;建議下載并安裝3.9.x&#xff09; https://www.python.org/downloads/windows/ 要注意勾選“Add Python 3.9 to PATH”復選框&#xff0c;表示將Python的路徑增加到環境變量中 2.安裝集成開發環境Pycharm http://www.jetbrains.com/pycharm/…

vue2-v-if和v-for的優先級

vue2-v-if和v-for的優先級 1.v-if和v-for的作用 v-if是條件渲染&#xff0c;只有條件表達式true的情況下&#xff0c;才會渲染v-for是基于一個數組來渲染一個列表&#xff0c;在v-for的時候&#xff0c;保證給每個元素添加獨一無二的key值&#xff0c;便于diff算法進行優化 …

通過C/C++編程語言實現“數據結構”課程中的鏈表

引言 鏈表(Linked List)是數據結構中最基礎且最重要的線性存儲結構之一。與數組的連續內存分配不同,鏈表通過指針將分散的內存塊串聯起來,具有動態擴展和高效插入/刪除的特性。本文將以C/C++語言為例,從底層原理到代碼實現,手把手教你構建完整的鏈表結構,并深入探討其應…

《redis4.0 通信模塊源碼分析(一)》

【redis導讀】redis作為一款高性能的內存數據庫&#xff0c;面試服務端開發&#xff0c;redis是繞不開的話題&#xff0c;如果想提升自己的網絡編程的水平和技巧&#xff0c;redis這款優秀的開源軟件是很值得大家去分析和研究的。 筆者從大學畢業一直有分析redis源碼的想法&…

開源安全一站式構建!開啟企業開源治理新篇章

在如今信息技術日新月異、飛速發展的數字化時代&#xff0c;開源技術如同一股強勁的東風&#xff0c;為企業創新注入了源源不斷的活力&#xff0c;然而&#xff0c;正如一枚硬幣有正反兩面&#xff0c;開源技術的廣泛應用亦伴隨著不容忽視的挑戰。安全風險如影隨形&#xff0c;…

DeePseek結合PS!批量處理圖片的方法教程

? ? 今天我們來聊聊如何利用deepseek和Photoshop&#xff08;PS&#xff09;實現圖片的批量處理。 傳統上&#xff0c;批量修改圖片尺寸、分辨率等任務往往需要編寫腳本或手動處理&#xff0c;而現在有了AI的輔助&#xff0c;我們可以輕松生成PS腳本&#xff0c;實現自動化處…