亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++算術(shù)運(yùn)算符與類型轉(zhuǎn)換

 更新時間:2021年11月03日 10:43:30   作者:Coder_LT  
這篇文章主要介紹了C++算術(shù)運(yùn)算符與類型轉(zhuǎn)換,C++當(dāng)中提供5種基礎(chǔ)的算術(shù)運(yùn)算符,分別是加法、減法、乘法、除法和取模。下main我們就一起來看看下面文章得具體舉例與說明,需要的朋友可以參考一下,希望對你有所幫助

1、算術(shù)運(yùn)算符

C++當(dāng)中提供5種基礎(chǔ)的算術(shù)運(yùn)算符:加法、減法、乘法、除法取模。

我們來看下代碼:

int a = 10, b = 3;

cout << a + b << endl;  // 13
cout << a - b << endl;  // 7
cout << a * b << endl;  // 30
cout << a / b << endl;  // 3
cout << a % b << endl;  // 1

前面三個都非常簡單,著重講下最后兩種。

對于除法來說,我們要注意的是它是區(qū)分類型的。當(dāng)我們的除數(shù)和被除數(shù)都是整數(shù)的時候,得到的結(jié)果也會是一個整數(shù)。所以10 ➗ 3得到的結(jié)果就是3,它的小數(shù)部分會被拋棄。想要得到小數(shù)結(jié)果,只需要除數(shù)或者被除數(shù)當(dāng)中有一個是浮點(diǎn)型即可。

取模運(yùn)算符求的就是一個數(shù)除以另外一個數(shù)之后的余數(shù)。這里要注意,在其他語言當(dāng)中并沒有對取模運(yùn)算的限制,而在C++當(dāng)中,嚴(yán)格限制了取模運(yùn)算的對象只能是整數(shù)。

否則編譯的時候會報(bào)錯:

2、優(yōu)先級

C++當(dāng)中算術(shù)運(yùn)算符的優(yōu)先級和我們從小數(shù)學(xué)課本里是一樣的,先乘除再加減。

如:

3 + 4 * 5; // 23
120 / 4 * 5; // 150
20 * 5 + 4 * 6; // 124


即當(dāng)乘除法和加減法同時出現(xiàn)時,先算乘除后算加減。如果有多個運(yùn)算符同樣優(yōu)先級,那么先左后右。

3、類型轉(zhuǎn)換

前面說了,同樣是除法,根據(jù)除數(shù)和被除數(shù)類型的不同,得到的結(jié)果也不同。這樣固然非常靈活,但是除了更加復(fù)雜給學(xué)習(xí)、使用者帶來負(fù)擔(dān)之外,也會使得計(jì)算機(jī)的操作更加復(fù)雜。

比如我們一共有11種整型和3種浮點(diǎn)型,那么我們在計(jì)算的時候就會出現(xiàn)大量不同的情況。比如short + short,short + int,short + double等等,那么編譯器就需要對這么多種情況都進(jìn)行處理,這顯然是非常麻煩的。為了解決這個問題,C++會自動執(zhí)行許多類型轉(zhuǎn)換。

下面我們對這些情況進(jìn)行一一討論。

初始化和賦值時的轉(zhuǎn)換

當(dāng)我們對某個值進(jìn)行初始化或者賦值的時候,C++會自動將賦予的值轉(zhuǎn)化成接收者的類型。

比如:

float a = 3.5f;
double b = a;

在上面這個例子當(dāng)中,我們將一個float類型的變量a賦值給了double類型的b。那么編譯器會將a的值拓展成64位的double再賦值給b。也就是說不會影響b的類型。

這樣將長度更短的變量轉(zhuǎn)化成更長變量的類型轉(zhuǎn)換除了多占用一點(diǎn)內(nèi)存之外,不會導(dǎo)致什么問題。但反向操作可能就會出錯,

比如:

long long a = 0x3f3f3f3f3f3f3f;
int b = a;

在上面的例子當(dāng)中,我們將一個long long賦值給了int,由于a的數(shù)值非常大超過了int能夠承載的范圍,進(jìn)行這樣的賦值之后,編譯器并不會報(bào)錯(甚至不會有警告),但將會導(dǎo)致結(jié)果錯誤。b變量將不可能再和a變量相等。

再比如將float變量賦值給int的時候,同樣也會有類似的問題,所以在進(jìn)行賦值的時候,當(dāng)兩個變量的類型不同時,千萬要當(dāng)心。

使用花括號進(jìn)行轉(zhuǎn)換

這是C++ 11的新特性,使用大括號進(jìn)行初始化,這種操作被稱為列表初始化。

這種方式的好處和壞處都很明顯,好處是它不允許變量長度縮窄的情況,壞處則是又增加了學(xué)習(xí)的成本。例如,不允許將浮點(diǎn)型轉(zhuǎn)換成整型。在不同的整型之間以及整型轉(zhuǎn)化成浮點(diǎn)型的操作可能被允許,取決于編譯器知道目標(biāo)變量能夠正確地存儲賦給它的值。比如可以將int類型賦值給long,因?yàn)?code>long總是至少與int一樣長,反向操作則會被禁止。

int a = 0x3f3f3f3f;
long b = {a};   // 允許

long a = 0x3f3f3f3f;
int b = {a};    // 禁止


關(guān)于列表初始化,C++ primer當(dāng)中還列舉了一個非常有意思的case

const int x = 55;
char c = {x};   // 允許

int x = 55;
char c = {x}; // 禁止

const int x = 1255;
char c = {x};   // 禁止

const int x = 1255;
char c = x;  // 允許會警告

這是為什么呢?因?yàn)槲覀兗恿?code>const修飾之后,編譯器就明確知道了x的值,就等于55,它在char類型的范圍內(nèi),所以允許將它轉(zhuǎn)化成char。如果不加const,那么在編譯器看來x是一個int型的變量,它的范圍要大于char,所以會禁止。即使我們加了const修飾,如果x的值過大,超過char的范圍,也同樣會被禁止。

4、表達(dá)式中轉(zhuǎn)換

當(dāng)一個表達(dá)式當(dāng)中出現(xiàn)多個變量類型的時候,C++也會進(jìn)行轉(zhuǎn)換。由于可能涉及的情況非常多,使得這個轉(zhuǎn)換的規(guī)則也會比較復(fù)雜。

表達(dá)式時C++會將bool、char、unsigned char、signed charshort全部轉(zhuǎn)換為int
對于bool類型來說,true會被轉(zhuǎn)化成1,false轉(zhuǎn)換成0,其他類型的轉(zhuǎn)換應(yīng)該都很好理解,都是將范圍更小的變量轉(zhuǎn)化成范圍更大的int,這種轉(zhuǎn)換稱作整型提升。因?yàn)橥ǔnt類型都是計(jì)算機(jī)最自然的類型,也意味著計(jì)算機(jī)在處理int的時候,處理的速度最快。

將不同類型進(jìn)行運(yùn)算的時候,也會做一些轉(zhuǎn)換。比如將intfloat相加的時候,由于涉及到兩種類型,其中范圍較小的那個會被轉(zhuǎn)換成較大的類型。比如如果我們計(jì)算9.0 / 5,那么編譯器會先將5轉(zhuǎn)化成5.0,再進(jìn)行除法運(yùn)算,這樣得到的結(jié)果自然也是一個double

C++11的規(guī)范中除了一個類型轉(zhuǎn)換的校驗(yàn)表,我們可以參考一下校驗(yàn)表理解一下類型轉(zhuǎn)換的過程。

  • 如果有一個數(shù)類型是long double,則將另外一個數(shù)也轉(zhuǎn)成long double
  • 否則,如果有一個數(shù)類型是double,則將另外一個數(shù)也轉(zhuǎn)成double
  • 否則,如果有一個數(shù)類型是float,則將另外一個數(shù)也轉(zhuǎn)成float
  • 否則說明所有操作數(shù)都是整數(shù),執(zhí)行整型提升

5、強(qiáng)制類型轉(zhuǎn)換

C++當(dāng)中允許開發(fā)者手動強(qiáng)制對變量的類型進(jìn)行轉(zhuǎn)換,這也是C++的設(shè)計(jì)思路,規(guī)則嚴(yán)謹(jǐn),但也允許推翻規(guī)則追求靈活度。

強(qiáng)制類型轉(zhuǎn)換的方式有兩種寫法:

int a;
(long) a;
long (a);

這兩行代碼都是將一個int型的a轉(zhuǎn)換成long型的,上面的是C語言的寫法,底下一行是C++的寫法。

還有一點(diǎn)要注意就是轉(zhuǎn)換的順序,我們來看一個例子:

int a = 11.99 + 19.99;
cout << a << endl;
int b = int(11.99) + int(19.99);
cout << b << endl;


在這段代碼當(dāng)中a和b輸出的結(jié)果是不同的,a輸出的結(jié)果是31,而b是30。

這是因?yàn)榈谝恍写a是先計(jì)算的加法,得到31.98,再通過類型轉(zhuǎn)換將31.98轉(zhuǎn)換成int。對于浮點(diǎn)數(shù)向整型的轉(zhuǎn)換,C++會直接抹掉小數(shù)部分,所以得到的結(jié)果是31。而第二行代碼當(dāng)中,我們是先進(jìn)行的類型轉(zhuǎn)換,11.99和19.99分別被轉(zhuǎn)換成了11和19,相加得到的結(jié)果也就是30了。

這里的一點(diǎn)差別很多新人經(jīng)常踩坑,千萬注意。

到此這篇關(guān)于C++算術(shù)運(yùn)算符與類型轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)C++算術(shù)運(yùn)算符與類型轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

注:文章轉(zhuǎn)自微信眾號:Coder梁(ID:Coder_LT)

相關(guān)文章

  • 詳解C++中的增量運(yùn)算符++和減量運(yùn)算符--的用法

    詳解C++中的增量運(yùn)算符++和減量運(yùn)算符--的用法

    這篇文章主要介紹了C++中的增量運(yùn)算符++和減量運(yùn)算符--的用法,分為前綴情況和后綴情況來講,需要的朋友可以參考下
    2016-01-01
  • 如何寫好C main函數(shù)的幾個注意事項(xiàng)

    如何寫好C main函數(shù)的幾個注意事項(xiàng)

    這篇文章主要介紹了如何寫好C main函數(shù)的幾個注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C語言中sizeof和strlen的區(qū)別詳解

    C語言中sizeof和strlen的區(qū)別詳解

    這篇文章主要介紹了C語言中sizeof和strlen的區(qū)別,文中有通過代碼示例和相關(guān)例題給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 用C語言實(shí)現(xiàn)圣誕樹(簡易版+進(jìn)階版)

    用C語言實(shí)現(xiàn)圣誕樹(簡易版+進(jìn)階版)

    大家好,本篇文章主要講的是用C語言實(shí)現(xiàn)圣誕樹(簡易版+進(jìn)階版),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • clion最新激活碼+漢化的步驟詳解(親測可用激活到2089)

    clion最新激活碼+漢化的步驟詳解(親測可用激活到2089)

    這篇文章主要介紹了clion最新版下載安裝+破解+漢化的步驟詳解,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • c++拷貝構(gòu)造函數(shù)防篡改示例

    c++拷貝構(gòu)造函數(shù)防篡改示例

    這篇文章主要介紹了拷貝構(gòu)造函數(shù)防篡改示例,需要的朋友可以參考下
    2014-04-04
  • C#開源類庫SimpleTCP使用方法

    C#開源類庫SimpleTCP使用方法

    SimpleTCP內(nèi)部有一個特殊字符分割字符串的協(xié)議可以直接使用,也可以在DataReceived事件處理程序中實(shí)現(xiàn)自己的協(xié)議,這篇文章主要介紹了C#開源類庫SimpleTCP的使用方法,需要的朋友可以參考下
    2021-09-09
  • C語言超詳細(xì)解析函數(shù)棧幀

    C語言超詳細(xì)解析函數(shù)棧幀

    在C語言中,每一個正在運(yùn)行的函數(shù)都有一個棧幀與其對應(yīng),棧幀中存儲的是該函數(shù)的返回地址和局部變量。從邏輯上講,棧幀就是一個函數(shù)執(zhí)行的環(huán)境:函數(shù)參數(shù)、函數(shù)的局部變量、函數(shù)執(zhí)行完后返回到哪里等等
    2022-03-03
  • C++利用隨機(jī)策略實(shí)現(xiàn)優(yōu)化二叉樹操作效率

    C++利用隨機(jī)策略實(shí)現(xiàn)優(yōu)化二叉樹操作效率

    這篇文章中我們主要來詳細(xì)探討隨機(jī)化二叉搜索樹的基本思想、實(shí)現(xiàn)方法,以及如何在C++中應(yīng)用這些策略來優(yōu)化我們的數(shù)據(jù)結(jié)構(gòu),感興趣的可以了解下
    2024-02-02
  • 關(guān)于雙向鏈表的增刪改查和排序的C++實(shí)現(xiàn)

    關(guān)于雙向鏈表的增刪改查和排序的C++實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄P(guān)于雙向鏈表的增刪改查和排序的C++實(shí)現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12

最新評論