运算符
单目、双目运算符(一元、二元运算符)
单目运算符和双目运算符是编程中的基本概念,它们的区别主要体现在操作数的数量、优先级以及结合性等方面。
单目运算符只需要一个操作数,单目运算符的优先级通常高于双目运算符。
双目运算符需要两个操作数。常见的双目运算符包括算术运算符、关系运算符、逻辑运算符以及赋值运算符等。在表达式中,不同的双目运算符具有不同的优先级。
算数运算符
这是一些常用的数学运算符,其遵循数学中加减乘除的优先规律,首先进行优先级高的运算,同优先级按运算的结合性运算,括号提高优先级。
单目运算符
+
(单目)(正号)
+
(单目)(正号)用于放在整数前表示一个正数。
-
(单目)(负号)
-
(单目)(负号)用于放在整数前表示一个负数。
双目运算符
+
(双目)(加法)
+
(双目)(加法)用于表示两数相加
-
(双目)(减法)
-
(双目)(减法)用于表示两数相减
*
(乘法)
*
(乘法)用于表示两数相乘
/
(除法)
/
(除法)用于表示两数相除
%
(取模)
%
(取模)A%B
表示A/B
整除后的余数
类型转换
当两个操作数类型不同时,会发生类型转换。转换原理见2.2的笔记,会将小整数类型的纯右值变为大整数类型。
例如,对于一个整型(int
)变量x和另一个双精度浮点型(double
)类型变量y:
x/3
的结果将会是整型;x/3.0
的结果将会是双精度浮点型;x/y
的结果将会是双精度浮点型;x*1/3
的结果将会是整型;x*1.0/3
的结果将会是双精度浮点型;
自增/自减运算符
自增/自减运算符可放在变量前或变量后面,在变量前称为前缀,在变量后称为后缀,单独使用时前缀后缀无需特别区别,如果需要用到表达式的值则需注意。
++
(自增)
++
(自增)A++
表示A
整数值增加1
-
(自减)
-
(自减)A--
表示A
整数值减少1
表达式中自增/自减运算符的运算顺序
i = 100;
op1 = i++; // op1 = 100,先 op1 = i,然后 i = i + 1
i = 100;
op2 = ++i; // op2 = 101,先 i = i + 1,然后赋值 op2
i = 100;
op3 = i--; // op3 = 100,先赋值 op3,然后 i = i - 1
i = 100;
op4 = --i; // op4 = 99,先 i = i - 1,然后赋值 op4
关系运算符
关系运算符用于比较两个值或表达式,并返回一个布尔值(true
或 false
)。以下是C++中常用的关系运算符:
==
检查两个值是否相等
(A==B)不为真
!=
检查两个值是否不相等
(A!=B)为真
>
检查左操作数的值是否大于右操作数的值
(A>B)为真
<
检查左操作数的值是否小于右操作数的值
(A<B)为真
>=
检查左操作数的值是否大于或等于右操作数的值
(A>=B)为真
<=
检查左操作数的值是否小于或等于右操作数的值
(A<=B)为真
逻辑运算符
在C++中,逻辑运算符用于对布尔值进行操作。这些运算符包括:
逻辑与(&&)
如果两个操作数都为真,则结果为真;否则结果为假。
bool a = true;
bool b = false;
bool result = (a && b); // result 为 false
逻辑或(||)
如果两个操作数中至少有一个为真,则结果为真;如果两个操作数都为假,则结果为假。
bool a = true;
bool b = false;
bool result = (a || b); // result 为 true
逻辑非(!)
将操作数的真假取反。如果操作数为真,则结果为假;如果操作数为假,则结果为真。
bool a = true;
bool result = (!a); // result 为 false
赋值运算符
=
将右边的值赋给左边
C=A+B
+=
把右边操作数加上左边操作数的结果赋值给左边操作数
C+=A,即C=C+A
-=
把右边操作数减去左边操作数的结果赋值给左边操作数
C-=A,即C=C-A
*=
把右边操作数乘以左边操作数的结果赋值给左边操作数
C*=A,即C=C*A
/=
把右边操作数除以左边操作数的结果赋值给左边操作数
C/=A,即C=C/A
%=
求两个操作数的模赋值给左边操作数
C%=A,即C=C%A
其他运算符
sizeof
在2.1中提到过,
在实际开发中,可以使用
sizeof
运算符来获取具体数据类型或变量所占用的字节数。
sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。
sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。
sizeof (data type)
通过对不同类型的数据使用,可以获得其不同的字节数。
Size of char : 1
Size of int : 4
Size of short int : 2
Size of long int : 4
Size of float : 4
Size of double : 8
Size of wchar_t : 4
条件运算符
Exp1 ? Exp2 : Exp3;
其中,Exp1、Exp2 和 Exp3 是表达式。请注意冒号的使用和位置。? : 表达式的值取决于 Exp1 的计算结果。如果 Exp1 为真,则计算 Exp2 的值,且 Exp2 的计算结果则为整个 ? : 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,且 Exp3 的计算结果则为整个 ? : 表达式的值。
? 被称为三元运算符,因为它需要三个操作数,可以用来代替如下所示的 if-else 语句:
if(condition){
var = X;
}else{
var = Y;
}
可被替换为
var = (condition) ? X : Y;
逗号运算符
使用逗号运算符是为了把几个表达式放在一起,整个逗号表达式的值为系列中最后一个表达式的值。从本质上讲,逗号的作用是将一系列运算按顺序执行。
最右边的那个表达式的值将作为整个逗号表达式的值,其他表达式的值会被丢弃,例如:
var = (count=19, incr=10, count+1);
在这里,首先把 count 赋值为 19,把 incr 赋值为 10,然后把 count 加 1,最后,把最右边表达式 count+1 的计算结果 20 赋给 var。上面表达式中的括号是必需的,因为逗号运算符的优先级低于赋值操作符。
强制转换运算符
强制转换运算符是一种特殊的运算符,它把一种数据类型转换为另一种数据类型。强制转换运算符是一元运算符,它的优先级与其他一元运算符相同。
(type) expression
其中,type 是转换后的数据类型。
例子:
#include <iostream>
using namespace std;
int main()
{
double a = 21.09399;
float b = 10.20;
int c ;
c = (int) a;
cout << "Line 1 - Value of (int)a is :" << c << endl ;
c = (int) b;
cout << "Line 2 - Value of (int)b is :" << c << endl ;
return 0;
}
输出是:
Line 1 - Value of (int)a is :21
Line 2 - Value of (int)b is :10
指针运算符
C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。
指针是一个包含了另一个变量地址的变量,您可以把一个包含了另一个变量地址的变量说成是"指向"另一个变量。变量可以是任意的数据类型,包括对象、结构或者指针。
这个在后文会单独说明。
Last updated