C++ 之运算符

本文详细介绍了C++编程语言中的算术运算符,包括加、减、乘、除、取模,以及自增和自减运算符的用法。除法运算在整数操作数间产生整数结果,取模运算返回两数相除的余数。自增和自减运算符有前置和后置之分,影响运算的顺序。此外,还涵盖了赋值、比较和逻辑运算符,以及逻辑运算中的短路现象。
摘要由CSDN通过智能技术生成

参考

项目描述
搜索引擎Google
C++ Primer Plus (第六版)中文版史蒂芬·普拉达 / 张海龙,袁国忠 译
黑马程序员C++
微软C++ 语言文档

描述

项目描述
操作系统Windows 10 专业版
编辑器VScode
g++8.1.0

算术运算符

C++ 所支持的算术运算符有:

项目描述
+正号、加法运算符
-负号、减法运算符
*乘法运算符
/除法运算符
%取模(取余)运算符
++自增运算符
--自减运算符

除法运算

C++ 中使用除法运算符时,除法运算符的行为因操作数的不同而不同,具体如下:

  1. 若两个操作数均为整数,则除法运算的结果将为整数。
  2. 若两个操作数中存在浮点数,则除法运算的结果将为浮点数。

举个栗子

#include <iostream>
using namespace std;


int main() {
    cout << 5 / 3 << endl;
    cout << 5.0 / 3 << endl;
    cout << 5.0 / 3.0 << endl;
    system("pause");
}

执行结果

1
1.66667
1.66667
请按任意键继续. . .

注:

  1. 除法操作符作用的两个操作数若为整数时,除法运算的结果将为整数。该整数并不是实际计算结果四舍五入后的结果,而是直接去除小数点及小数点后面的部分。

  2. 在表达式中,除数不能为零。否则,C++ 将抛出错误。

取模运算

取模运算与除法运算的区别在于,除法运算的结果值为两数相除的结果,而取模运算的结果值为两数相除所得到的余数。

举个栗子

#include <iostream>
using namespace std;


int main() {
    cout << 5 % 3 << endl;
    system("pause");
}

执行结果

2
8
0
请按任意键继续. . .

注:

  1. 取模运算符的操作数不可为浮点数,仅能为整数。否则,C++ 将抛出错误。

  2. 取模运算符的操作数中若存在负数,则结果的符号满足如下规则:
    A % B = (A / B) * B 。总的来说,取模运算的结果值的符号与 A 的符号相同。

举个栗子

#include <iostream>
using namespace std;


int main() {
    cout << -5 % 3 << endl;
    cout << 8 % -20 << endl;
    cout << -3 % -3 << endl;
    cout << -2 % -3 << endl;
    system("pause");
}

执行结果

-2
8
0
-2
请按任意键继续. . .

分析

-3 % -3 的结果值为 0 而不是 -0,这是由于对于 Java 来说,+0-0 是相等的。

自增运算符

使用自增运算符可以将类似 a = a + 1 的语句简化为 a++++a。其中,a++ 中的 ++ 称为后置自增运算符,++a 中的 ++ 称为前置自增运算符。
前置自增与后置自增的区别在于,两者所作用的操作数自增的时机不同。前置自增的自增时机在包含自增语句的表达式执行完毕前(执行到自增语句时立即完成自增)完成自增,而后置自增的自增时机则在包含自增语句的表达式执行完毕后完成自增。

举个栗子

#include <iostream>
using namespace std;


int main() {
    int num = 3;
    // 3 * 6 + 3 * 6 = 36
    cout << 3 * 6 + num++ * 6 << endl;
    num = 3;
    // 3 * 6 + 4 * 6 = 42
    cout << 3 * 6 + ++num * 6 << endl;
    system("pause");
}

执行结果

36
42
请按任意键继续. . .

自减运算符

自减运算符与自增运算符的效果类似,只是自增运算符最终将实现操作数的自增(+1),而自减运算符最终将实现操作数的自减(-1)。

赋值运算符

C++ 支持如下赋值运算符(下表中除 = 运算符之外的所有其他赋值运算符均为复合赋值运算符。):

项目描述
=简单赋值
+=将第二个操作数的值与第一个操作数的值相加;将结果存储在第一个操作数指定的变量中。
-=将第二个操作数的值与第一个操作数的值相减;将结果存储在第一个操作数指定的变量中。
*=将第二个操作数的值与第一个操作数的值相乘;将结果存储在第一个操作数指定的变量中。
/=将第二个操作数的值与第一个操作数的值相除;将结果存储在第一个操作数指定的变量中。
%=使用指定的第二个操作数的值对第一个操作数中的值进行取模;将结果存储在第一个操作数指定的变量中。

举个栗子

#include <iostream>
using namespace std;


int main() {
    // 声明一个整型变量
    int num;
    // 简单赋值
    num = 3;
    cout << "【简单赋值】" << num << endl;
    // 复合赋值运
    cout << num << " += 3\t" << (num += 3) << endl;
    cout << num << " -= 3\t" << (num -= 3) << endl;
    system("pause");
}

执行结果

【简单赋值】3
3 += 3  6
6 -= 3  3
请按任意键继续. . .

注:

+=-= 运算符的执行优先级要低于 << 运算符,为了使得算术表达式被正常执行,我们在表达式外围添加了 () 以提高表达式的优先级。

比较运算符

比较运算符作用于两个操作数,运算结果为布尔值。C++ 支持如下比较运算符:

项目描述
==判断两个操作数是否相等,若两者相等则运算结果为 true,否则为 false
!=判断两个操作数是否不相等,若两者不相等则运算结果为 true,否则为 false
>判断左操作数是否大于右操作数,若是则运算结果为 true,否则为 false
<判断左操作数是否小于右操作数,若是则运算结果为 true,否则为 false
>=判断左操作数是否大于或等于右操作数,若是则运算结果为 true,否则为 false
<=判断左操作数是否小于或等于右操作数,若是则运算结果为 true,否则为 false

举个栗子

#include <iostream>
using namespace std;


int main() {
    cout << (3 > 6) << endl;
    cout << (6 >= 6) << endl;
    cout << ('3' == 3) << endl;
    system("pause");
}

执行结果

0
1
0
请按任意键继续. . .

逻辑运算符

项目描述称呼别称
!操作数将被隐式转换为 Bool 类型。 如果转换结果为 false,则运算结果为 true;反之,结果为 false逻辑非
&&操作数将被隐式转换为 Bool 类型。如果两个操作数的转换结果均为 true,则运算结果为 true,否则为 false逻辑与短路与
||操作数将被隐式转换为 Bool 类型。如果两个操作数的转换结果中存在 true,则运算结果为 true,否则为 false逻辑或短路或

举个栗子

#include <iostream>
using namespace std;


int main() {
    cout << !true << endl;
    cout << (true && false) << endl;
    cout << (true && true) << endl;
    cout << (666 || 0) << endl;
    system("pause");
}

执行结果

0
0
1
1
请按任意键继续. . .

注:

在 C++ 中,所有的非零值转换为布尔值的结果均为 true;零转换为布尔值的结果为 false

短路

逻辑与运算符仅当第一个操作数的转换结果为 true时,才会计算第二个操作数。
逻辑或运算符仅当第一个操作数的转换结果为 false时,才会计算第二个操作数。

逻辑与运算符的第一个操作数的转换结果为 false 以及 逻辑或运算符的第一个操作数为 true 时,都将发生 短路,即后一个操作数不会被计算。

举个栗子

#include <iostream>
using namespace std;


int main() {
    int num = 1;
    cout << (true || num++) << endl;
    cout << num << endl;
    cout << (false && num++) << endl;
    cout << num << endl;
    system("pause");
}

执行结果

在上述代码执行过程中,变量 num 被初始化为 1 后保存的值未曾发生过改变。原因是逻辑运算过程中发生了短路,num++ 均未被执行。

1
1
0
1
请按任意键继续. . .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZeroHeroX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值