国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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 + short,short + int,short + 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++會將bool、char、unsigned 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
主站蜘蛛池模板: 欲色视频 | 久久免费精品视频 | 久久综合伊人77777蜜臀 | 色综合久久久 | 成人福利视频 | 精品久久久久一区二区国产 | 日韩中文字幕无码一区二区三区 | a级免费电影| 四虎免费看黄 | 夜夜草av | 欧美日韩高清一区 | 日韩av在线电影 | 久久精品亚洲一区二区 | 人人爽在线观看 | 亚洲精品视频一区二区三区 | 久久精品香蕉 | 日本高清中文字幕 | 综合亚洲精品 | 亚洲综合色自拍一区 | 国产99精品 | 日韩国产精品一区二区 | 久久色视频 | 伊人激情综合网 | 午夜精品久久久久久 | 日韩综合 | 国产亚洲精品精品国产亚洲综合 | 亚洲欧美中文日韩在线v日本 | 在线成人国产 | 天天澡天天狠天天天做 | 国产精品一区二区三区在线播放 | 在线a人片免费观看视频 | 日韩一区二区在线观看 | 日韩高清一区 | 精品久久久一区 | 精品无码久久久久久久动漫 | 亚洲精品久久久久久下一站 | 亚洲国产精品久久久久久久久久久 | 在线观看一区二区三区四区 | 国产一区免费视频 | 久久久久国产 | 一区二区三区国产视频 |