激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++算術運算符與類型轉換

C++算術運算符與類型轉換

2022-02-19 16:09Coder_LT C/C++

這篇文章主要介紹了C++算術運算符與類型轉換,C++當中提供5種基礎的算術運算符,分別是加法、減法、乘法、除法和取模。下main我們就一起來看看下面文章得具體舉例與說明,需要的朋友可以參考一下,希望對你有所幫助

1、算術運算符

C++當中提供5種基礎的算術運算符:加法減法乘法除法取模

我們來看下代碼:

?
1
2
3
4
5
6
7
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

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

對于除法來說,我們要注意的是它是區分類型的。當我們的除數和被除數都是整數的時候,得到的結果也會是一個整數。所以10 ? 3得到的結果就是3,它的小數部分會被拋棄。想要得到小數結果,只需要除數或者被除數當中有一個是浮點型即可。

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

否則編譯的時候會報錯:

C++算術運算符與類型轉換

2、優先級

C++當中算術運算符的優先級和我們從小數學課本里是一樣的,先乘除再加減。

如:

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

即當乘除法和加減法同時出現時,先算乘除后算加減。如果有多個運算符同樣優先級,那么先左后右。

3、類型轉換

前面說了,同樣是除法,根據除數和被除數類型的不同,得到的結果也不同。這樣固然非常靈活,但是除了更加復雜給學習、使用者帶來負擔之外,也會使得計算機的操作更加復雜。

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

下面我們對這些情況進行一一討論。

初始化和賦值時的轉換

當我們對某個值進行初始化或者賦值的時候,C++會自動將賦予的值轉化成接收者的類型。

比如:

?
1
2
float a = 3.5f;
double b = a;

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

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

比如:

?
1
2
long long a = 0x3f3f3f3f3f3f3f;
int b = a;

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

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

使用花括號進行轉換

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

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

?
1
2
3
4
5
int a = 0x3f3f3f3f;
long b = {a};   // 允許
 
long a = 0x3f3f3f3f;
int b = {a};    // 禁止

關于列表初始化,C++ primer當中還列舉了一個非常有意思的case

?
1
2
3
4
5
6
7
8
9
10
11
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;  // 允許會警告

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

4、表達式中轉換

當一個表達式當中出現多個變量類型的時候,C++也會進行轉換。由于可能涉及的情況非常多,使得這個轉換的規則也會比較復雜。

表達式時C++會將boolcharunsigned charsigned charshort全部轉換為int
對于bool類型來說,true會被轉化成1,false轉換成0,其他類型的轉換應該都很好理解,都是將范圍更小的變量轉化成范圍更大的int,這種轉換稱作整型提升。因為通常int類型都是計算機最自然的類型,也意味著計算機在處理int的時候,處理的速度最快。

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

C++11的規范中除了一個類型轉換的校驗表,我們可以參考一下校驗表理解一下類型轉換的過程。

  • 如果有一個數類型是long double,則將另外一個數也轉成long double
  • 否則,如果有一個數類型是double,則將另外一個數也轉成double
  • 否則,如果有一個數類型是float,則將另外一個數也轉成float
  • 否則說明所有操作數都是整數,執行整型提升

5、強制類型轉換

C++當中允許開發者手動強制對變量的類型進行轉換,這也是C++的設計思路,規則嚴謹,但也允許推翻規則追求靈活度。

強制類型轉換的方式有兩種寫法:

?
1
2
3
int a;
(long) a;
long (a);

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

還有一點要注意就是轉換的順序,我們來看一個例子:

?
1
2
3
4
int a = 11.99 + 19.99;
cout << a << endl;
int b = int(11.99) + int(19.99);
cout << b << endl;

在這段代碼當中a和b輸出的結果是不同的,a輸出的結果是31,而b是30。

這是因為第一行代碼是先計算的加法,得到31.98,再通過類型轉換將31.98轉換成int。對于浮點數向整型的轉換,C++會直接抹掉小數部分,所以得到的結果是31。而第二行代碼當中,我們是先進行的類型轉換,11.99和19.99分別被轉換成了11和19,相加得到的結果也就是30了。

這里的一點差別很多新人經常踩坑,千萬注意。

到此這篇關于C++算術運算符與類型轉換的文章就介紹到這了,更多相關C++算術運算符與類型轉換內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

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

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 偿还的影视高清在线观看 | 国产外围在线 | 九九热九九爱 | 久草在线观看资源 | 羞羞网站 | 色播一区 | 国产成人在线播放视频 | 91国内精品久久久久免费影院 | 国产一级片91 | 调教小男生抽打尿孔嗯啊视频 | 91毛片网站 | 国产91在线播放九色 | 九九精品久久 | 在线播放黄色片 | 亚洲欧美国产高清va在线播放 | 欧洲色阁中文字幕 | 国产日韩久久久久69影院 | 日本精品视频一区二区三区四区 | 视屏一区 | 国产亚洲精品综合一区91555 | 久久最新免费视频 | chinesegv男男猛男无套 | 日本黄色一级视频 | 久久艹综合 | 日本精品久久久一区二区三区 | 国产一区二区视频精品 | lutube成人福利在线观看污 | 男男成人高潮片免费视频欧美 | 亚洲国产在| 国产精品美女久久久久久不卡 | 超碰人人做人人爱 | 精品999久久久 | 伊人99在线| sese在线视频| 国产毛片aaa一区二区三区视频 | 久久精品国产精品亚洲 | 毛片在线免费观看网址 | 中国毛片在线观看 | 国产乱淫a∨片免费观看 | 国产精品剧情一区二区三区 | 欧美成人三级视频 |