【C++知识点整理: 04算数表达式】

文章目录

  • 前言
  • 一、C++算术知识
    • 1.基本的算数计算
    • 2.优先级
    • 3.除法分支
    • 4.类型转换
      • 初始化和赋值进行的转换
      • 潜在的数值转换问题
      • 以{}初始化时的转换
      • 表达式中的转换
      • 强制类型转换
    • 5.auto声明
  • 总结


前言

提示:本文为C++复习资料,从头回顾这些基础,希望自己能更进一步。


提示:以下是本篇文章正文内容

一、C++算术知识

1.基本的算数计算

C++提供了5中基本的算术计算:加法、减法、乘法、除法以及求模。

int num1 = 6 + 8;

6和8都是操作数,+号为运算符,6+8为表达式,其结果将赋予int类型变量num1。

5种基本运算符:

+号运算符、-号运算符、*号运算符、/号运算符以及%运算符。

其中/号运算符:如果两个操作数都是整数,则结果为商的整数部分,小数部分被丢弃。如果其中一个操作数为float,则输出含有小数部分。

%运算符:生成第一个数除以第二个数得到的余数部分,例如8 % 6为2。

注意用%运算符时,两个操作数都必须是整型,该运算符用于浮点数将导致编译错误。如果其中一个操作数为负数,则看第一个操作数的正负号,为正则结果也为正,为负则结果也为负,与第二操作数无关。

2.优先级

C++运算符遵从以下几点:

1.先乘除,后加减。
例如:6+89可以看作6+(89);

2.*、/和%位于同一优先级。+和-优先级相同但低于乘除。

3.优先级的顺序:

float f = 8/6*9;

此时优先级本身并不能指出程序应该先计算左边的/运算还是右边的运算,两者得到的结果并不相同,当两个运算符的优先级相同时,C++将看操作符的结合性是从左到右还是从右到左。从结合性方面的资料查找来看,乘除都是从左到右的,所以先进行8/6,再9.

3.除法分支

之前提到过/运算符对于两个整型,将舍弃结果的小数部分,如果两个操作符至少含有一个float类型变量,则会保留小数部分。

如果两个操作符都是double类型,则结果为double类型;两者都是float则结果为float类型,浮点类型在默认情况下为double类型,所以操作数一个为float,一个为double,则结果为double。

查看数据类型的方法

#include  
cout << typeid(变量名).name() << endl;

4.类型转换

在C++中,共存在11中整型和3中浮点类型,针对不同类型数据的运算,C++会执行类型的转换。

1.将一种算术类型的值赋予另一种算术类型的变量时,会对值进行转换。

2.表达式中含有不同类型时,会对其进行转换,例如之前提到的float/double得到的结果类型为double。

3.将参数传给函数时,会进行转换。

初始化和赋值进行的转换

C++允许将一种类型的值赋给另一种类型的变量。其值会被转换为接受变量的类型。

double num1 = 6.8;

int num2 = d1;

cout << typeid(num2).name() << '\n' << "Value:" << a1 << endl;

结果如下:

int
Value:6

结果被转换成了int类型,且直接舍弃了小数部分。

long num1;
short num2 = 8;
num1 = num2;

进行赋值的时候,程序将num2的值扩展为long类型,扩展后得到一个新值,这个值被赋予num1,而num2的内容不变。

潜在的数值转换问题

转换 潜在的问题
将较大的浮点类型转换为较小的浮点类型,例如double转换为short类型 精度降低,值将超出取值范围,结果未知
将浮点型转换为整形 小数部分丢失,原来的值可能超出取值范围,结果将未知
将较大的整型转换为较小的整型,如long转换为short 原来的值超出取值范围,通常只复制右边的字节

之前提到过的bool类型也是如此,将非零值转换为1,也就是true,将零值转换为0,也就是false

以{}初始化时的转换

以大括号的形式进行初始化常用于给复杂的数据类型提供值列表,初始化时不允许缩窄,比如浮点型转换为整型时将被禁止,但不同的整型之间转换或者将整型转换为浮点型可能会被允许。

表达式中的转换

这一点尤为重要,请看下方代码:

short num1 = 68;
short num2 = 69;
short num3 = num1 + num2;

在程序执行过程中,编译器首先将num1和num2的值转换为Int类型,然后将得到的结果转换为short类型,因为结果将被赋予short类型。整体情况是因为计算机将int作为最自然的类型,所以,在使用int进行计算时,运算速度是最快的。

其次,当涉及到两种类型的运算时,较小的类型将被转换为较大的类型。详细情况如下:

1.如果有一个操作数的类型时long double,则将另一个操作数转换为long double;

2.否则,如果有一个操作数的类型是double,则将另一个操作数转换为double;

3.否则,如果有一个操作数的类型是float,则将另一个操作数的类型转换为float;

4.否则,说明操作数都是整型,因此执行整型提升。

5.在这种情况下,如果两个操作数都是有符号或无符号的,且其中一个操作数的级别比另一个低。则转换为级别较高的类型。

6.如果一个操作数为有符号的,另一个操作数为无符号,且无符号操作数的级别比有符号操作数高,则将有符号操作数转换为无符号操作数所属的类型。

7.否则,如果有符号类型可表示无符号类型的所有可能取值,则将无符号操作数转换为有符号操作数所属的类型。

8.否则,将两个操作数都转换为有符号类型的无符号版本。

强制类型转换

格式如下所示:

(typename) value;
typename (value);

其余强制转换符将在后面提到。

5.auto声明

auto的作用是让编译器能够根据初始值的类型推断变量的类型。在不指定变量类型的情况下,编译器将把变量的类型设置称为与初始值相同。

auto num1 = 100;
auto num2 = 6.8;
auto num3 = 6.8e+22;

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(C/C++,编程基础,c++,开发语言)