C++语言基础入门(2) – 运算符

运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 杂项运算符

算数运算符

假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符 描述 实例
+ 把两个操作数相加 A + B 将得到 30
- 从第一个操作数中减去第二个操作数 A - B 将得到 -10
* 把两个操作数相乘 A * B 将得到 200
/ 分子除以分母 B / A 将得到 2
% 取模运算符,整除后的余数 B % A 将得到 0
++ 自增运算符,整数值增加 1 A++ 将得到 11
-- 自减运算符,整数值减少 1 A-- 将得到 9

示例:

int main()
{
   int a = 21;
   int b = 10;
   int c;
 
   c = a + b;
   cout << "Line 1 - c 的值是 " << c << endl ;
   c = a - b;
   cout << "Line 2 - c 的值是 " << c << endl ;
   c = a * b;
   cout << "Line 3 - c 的值是 " << c << endl ;
   c = a / b;
   cout << "Line 4 - c 的值是 " << c << endl ;
   c = a % b;
   cout << "Line 5 - c 的值是 " << c << endl ;
 
   int d = 10;   //  测试自增、自减
   c = d++;
   cout << "Line 6 - c 的值是 " << c << endl ;
 
   d = 10;    // 重新赋值
   c = d--;
   cout << "Line 7 - c 的值是 " << c << endl ;
   return 0;
}

当上面的代码被编译和执行时,它会产生以下结果:

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 10
Line 7 - c 的值是 10

 

注意:

  1. 整数的算术运算的结果还是整数,如21/6==3,余数被舍弃
  2. 对于%求余来说,要求两个数都是整数,计算被除数除以除数的余数。(若其中有负数,则运算结果和被除数的符号一致,如下)21%-4==1 ; -21%4==-1
  3. 表达式中若运算对象的数据类型不同,则编译器会自动进行类型转换,即隐式类型转换。

赋值运算符

下表列出了 C++ 支持的赋值运算符:

运算符 描述 实例
= 简单的赋值运算符,把右边操作数的值赋给左边操作数 C = A + B 将把 A + B 的值赋给 C
+= 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 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
<<= 左移且赋值运算符 C <<= 2 等同于 C = C << 2
>>= 右移且赋值运算符 C >>= 2 等同于 C = C >> 2
&= 按位与且赋值运算符 C &= 2 等同于 C = C & 2
^= 按位异或且赋值运算符 C ^= 2 等同于 C = C ^ 2
|= 按位或且赋值运算符 C |= 2 等同于 C = C | 2

赋值符的左边必须是一个支持写操作的左值。算术表达式必须为右值,将此值赋值给左边。

int i=0,j=i;  //对J初始化并赋值
i+j=10;  //错误语句:算术表达式必须在赋值符的右边
int i=0;
double d=3.14159;
i=d;
cout<<i;  //结果为3
cout<<d;  //结果为3.14159
//该操作将右侧值赋给左侧,且左侧类型不变。右侧值和右侧类型在此操作中始终不变。

如果赋值符左右两侧对象的类型不同,则编译器自动把右侧对象的值转换为左侧,并且类型与左侧一致。

 

 

赋值运算具有右结合性,如下:

i=j=5;  //先将5赋值给j,再将j=5赋值给i

让笔者没想到的是,C++中赋值运算竟然支持函数调用返回作为左值参与赋值操作;

GetMax(a,b)=100;
int c=GetMax(a,b)=100;

 

关系运算符

下表显示了 C++ 支持的关系运算符。

假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符 描述 实例
== 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 不为真。
!= 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 不为真。
< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) 为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 不为真。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真。

表达式示例:

i<=j<=k;  
//这个表达式不成立,根据左结合,先算(i<=j),其结果是1/0。所以只要k大于等于1,右面的式子即可成立。
i<=j && j<=k;  //正确表达

逻辑运算符

下表显示了 C++ 支持的关系逻辑运算符。

在C++中,除了0都为真。假设变量 A 的值为 1,变量 B 的值为 0,则:

&& 称为逻辑与运算符。如果两个操作数都 true,则条件为 true。 (A && B) 为 false。
|| 称为逻辑或运算符。如果两个操作数中有任意一个 true,则条件为 true。 (A || B) 为 true。
! 称为逻辑非运算符。用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。 !(A && B) 为 true。

由于&&和||运算符都是左结合,因此有如下规则:

  1. 对于&&,仅当左侧对象为真时,才计算右侧对象的值
  2. 对于||,仅当左侧对象为假时,才计算右侧对象的值

 

 

给TA打赏
共{{data.count}}人
人已打赏
开发

C/C++数据结构-栈的应用

2023-9-15 17:38:39

开发

UML-序列图|时序图|顺序图(生命线,会话,消息,组合框)

2023-9-15 17:42:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索