返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++算术运算符与类型转换
  • 477
分享到

C++算术运算符与类型转换

2024-04-02 19:04:59 477人浏览 泡泡鱼
摘要

目录1、算术运算符2、优先级3、类型转换初始化和赋值时的转换使用花括号进行转换4、表达式中转换5、强制类型转换1、算术运算符 C++当中提供5种基础的算术运算符:加法、减法、乘法、除

1、算术运算符

C++当中提供5种基础的算术运算符:加法减法乘法除法取模

我们来看下代码:


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++当中,严格限制了取模运算的对象只能是整数。

否则编译的时候会报错:

2、优先级

C++当中算术运算符的优先级和我们从小数学课本里是一样的,先乘除再加减。

如:


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


即当乘除法和加减法同时出现时,先算乘除后算加减。如果有多个运算符同样优先级,那么先左后右。

3、类型转换

前面说了,同样是除法,根据除数和被除数类型的不同,得到的结果也不同。这样固然非常灵活,但是除了更加复杂给学习、使用者带来负担之外,也会使得计算机的操作更加复杂。

比如我们一共有11种整型和3种浮点型,那么我们在计算的时候就会出现大量不同的情况。比如short + shortshort + intshort + double等等,那么编译器就需要对这么多种情况都进行处理,这显然是非常麻烦的。为了解决这个问题,C++会自动执行许多类型转换。

下面我们对这些情况进行一一讨论。

初始化和赋值时的转换

当我们对某个值进行初始化或者赋值的时候,C++会自动将赋予的值转化成接收者的类型。

比如:


float a = 3.5f;
double b = a;

在上面这个例子当中,我们将一个float类型的变量a赋值给了double类型的b。那么编译器会将a的值拓展成64位的double再赋值给b。也就是说不会影响b的类型。

这样将长度更短的变量转化成更长变量的类型转换除了多占用一点内存之外,不会导致什么问题。但反向操作可能就会出错,

比如:


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

在上面的例子当中,我们将一个long long赋值给了int,由于a的数值非常大超过了int能够承载的范围,进行这样的赋值之后,编译器并不会报错(甚至不会有警告),但将会导致结果错误。b变量将不可能再和a变量相等。

再比如将float变量赋值给int的时候,同样也会有类似的问题,所以在进行赋值的时候,当两个变量的类型不同时,千万要当心。

使用花括号进行转换

这是C++ 11的新特性,使用大括号进行初始化,这种操作被称为列表初始化。

这种方式的好处和坏处都很明显,好处是它不允许变量长度缩窄的情况,坏处则是又增加了学习的成本。例如,不允许将浮点型转换成整型。在不同的整型之间以及整型转化成浮点型的操作可能被允许,取决于编译器知道目标变量能够正确地存储赋给它的值。比如可以将int类型赋值给long,因为long总是至少与int一样长,反向操作则会被禁止。


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

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


关于列表初始化,C++ primer当中还列举了一个非常有意思的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;  // 允许会警告

这是为什么呢?因为我们加了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++的设计思路,规则严谨,但也允许推翻规则追求灵活度。

强制类型转换的方式有两种写法:


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

这两行代码都是将一个int型的a转换成long型的,上面的是C语言的写法,底下一行是C++的写法。

还有一点要注意就是转换的顺序,我们来看一个例子:


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)

--结束END--

本文标题: C++算术运算符与类型转换

本文链接: https://lsjlt.com/news/156253.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++算术运算符与类型转换
    目录1、算术运算符2、优先级3、类型转换初始化和赋值时的转换使用花括号进行转换4、表达式中转换5、强制类型转换1、算术运算符 C++当中提供5种基础的算术运算符:加法、减法、乘法、除...
    99+
    2024-04-02
  • C++类型转换运算符详解
    目录老式显式类型转换c++的显示类型转换为什么要有新的类型转换具体应该使用哪种转换static_cast运算符dynamic_cast运算符const_cast运算符reinterp...
    99+
    2024-04-02
  • JavaScript运算符规则与隐式类型的转换
    本篇内容介绍了“JavaScript运算符规则与隐式类型的转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • C++11中explicit类型转换运算符的实例用法
    这篇文章主要介绍“C++11中explicit类型转换运算符的实例用法”,在日常操作中,相信很多人在C++11中explicit类型转换运算符的实例用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11...
    99+
    2023-06-19
  • Javascript运算符和数据类型如何转换
    本篇内容主要讲解“Javascript运算符和数据类型如何转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript运算符和数据类型如何转换”吧! ...
    99+
    2024-04-02
  • VB.NET类型转换相关运算符有哪些
    这篇文章给大家分享的是有关VB.NET类型转换相关运算符有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。VB.NET类型转换提供了两种转型运算符:DirectCast 和CTypeDirectCast是***...
    99+
    2023-06-17
  • 【Kotlin】类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )
    文章目录 一、使用 is 运算符进行类型检测二、使用 as 运算符进行类型转换 ( 智能类型转换 )三、Any 超类 一、使用 is 运算符进行类型检测 在 Kotlin 中 , 如果不确定一个 实例对象的类型 , ...
    99+
    2023-08-23
    kotlin java is运算符 as运算符 Any超类
  • python输入、数据类型转换及运算符方式
    目录一、输入二、常用转换数据类型的函数 三、运算符1.算术运算符2.赋值运算符3.复合赋值运算符4.比较运算符5.逻辑运算符一、输入 input("提示内容&qu...
    99+
    2024-04-02
  • JS中常用类型转换及运算符表达式
    这篇文章主要介绍“JS中常用类型转换及运算符表达式”,在日常操作中,相信很多人在JS中常用类型转换及运算符表达式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS中常用类型转...
    99+
    2024-04-02
  • C#的算术运算符怎么用
    这篇文章主要介绍“C#的算术运算符怎么用”,在日常操作中,相信很多人在C#的算术运算符怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#的算术运算符怎么用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-17
  • C#中算术运算符有哪些
    这篇文章主要介绍了C#中算术运算符有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C#运算符之算术运算符的概念了解:总体来说,我们可以把C#当中的运算符分为六种,分别是:...
    99+
    2023-06-18
  • C++算术运算符如何使用
    本篇内容主要讲解“C++算术运算符如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++算术运算符如何使用”吧!1. 前言编写程序时,数据确定后,就需要为数据提供相应的处理逻辑(方案或算法...
    99+
    2023-07-02
  • C语言算术运算符整理
    下表列出了C语言中的算术运算符。 运算符操作-减法+加法*乘法/除法%模量--递减++增量 当应用/到整数或字符时,任何余数都将被截断。 例如,5/2将在整数除法中等于2。模数运算符...
    99+
    2023-03-09
    c语言运算符
  • php运算符运用之类型运算符怎么用
    这篇文章将为大家详细讲解有关php运算符运用之类型运算符怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。类型运算符指的是instanceof。instanceof运算符是php5引进的。在此之前用is...
    99+
    2023-06-20
  • SQL 算术运算符和比较运算符
    目录一、算术运算符二、需要注意 NULL三、比较运算符四、对字符串使用不等号时的注意事项五、不能对 NULL 使用比较运算符请参阅 学习重点 运算符就是对其两边的列或者值进行运算(计算或者比较大小等)的符号。 使用算术运算符可以...
    99+
    2021-12-29
    SQL 算术运算符和比较运算符
  • Python变量、数据类型与运算符
             1、掌握变量使用及命名规则1.1 变量赋值变量赋值通过“=”实现,实例: a = 5 b = 3.14 c = ‘abc’注意事项:变量名尽量具有现实意义  实例: price = 100 Name = ‘张飞’ Age ...
    99+
    2023-01-31
    变量 数据类型 运算符
  • Python学习-算术运算符,赋值运算符
    算术运算符   常见的算术运算符有 :    +     加法运算符  print(1 + 2); // 3 print('1' + '2'); //12   不仅可以进行2个数字的相加,还可以连接2个字符串  -     减法...
    99+
    2023-01-30
    运算符 赋值 算术
  • 数据类型及运算符
    一、变量 变量定义规则   1.变量名只能是数字,字母或下划线的任意组合   2.变量名的第一个字符不能是数字   3.以下关键字不能声明为变量名{'and','as','del','def','if','else','with','co...
    99+
    2023-01-30
    数据类型 运算符
  • C#算术运算符使用实例分析
    这篇文章主要介绍了 C#算术运算符使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇 C#算术运算符使用实例分析文章都会有所收获,下面我们一起来看看吧。实例using System;names...
    99+
    2023-06-17
  • C#支持的算术运算符有哪些
    本篇内容主要讲解“C#支持的算术运算符有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#支持的算术运算符有哪些”吧!算术运算符下表显示了 C# 支持的所有算术运算符。假设变量 A...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作