【入门级-C++程序设计:4、基本运算】

C++ 提供了丰富多彩的运算符,涵盖算术运算、关系运算(比较运算)、逻辑运算、赋值运算等等多个类别,下面分类进行介绍说明。
1、算术运算
假设a的值未10,b的值为4
加法 + int c = a + b; 数值相加,结果为14
减法 - int c = a - b; 数值相减,结果为6
乘法 * int c = a * b; 数值相乘,结果为40
除法 / float c = a / b; 数值相除(这里a和b应该被定义未float类型),结果为2.5
整除 / int c = a / b; 整数除法会截断小数部分,只取值整数部分,结果为2
求余 % int c = a % b; 取模(余数),仅适用于整数,结果符号与被除数相同,结果为2

除(普通除法)与整除的区别:
普通除法 (真实除法)
当至少有一个操作数是浮点类型(float/double)时,则执行普通除法
double a = 10.0 / 4; // 2.5 (浮点结果)
float b = 10 / 4.0f; // 2.5f
double c = 10.0 / 4.0; // 2.5
特点:
保留完整的小数部分;结果更精确;适用于需要精确计算的场景

整除 (整数除法)
当两个操作数都是整数类型时,执行整除
int d = 10 / 4; // 2 (不是2.5)
int e = -10 / 3; // -3 (向零截断)
int f = 10 / 3; // 3 (截断小数部分)
特点:
丢弃小数部分(不是四舍五入);向零截断(正数向下取整,负数向上取整);计算速度快于浮点除法

2、关系运算:大于、大于等于、小于、小于等于、等于、不等于
关系运算符用于比较两个值,比较结果返回 true(1)或 false(0)。它们是逻辑控制和条件判断的基础。
运算符 含义 示例 返回值规则

大于 5 > 3 左操作数大,返回 true
= 大于或等于 5 >= 5 左操作数≥右操作数,返回 true
< 小于 3 < 5 左操作数小,返回 true
<= 小于或等于 5 <= 5 左操作数≤右操作数,返回 true
== 等于 5 == 5 值相等,返回 true
!= 不等于 5 != 3 值不等,返回 true

3、逻辑运算:与(&&)、或()、非(!)
逻辑运算符用于组合或修改布尔表达式,是构建复杂条件判断的基础。C++ 提供了三种基本逻辑运算符。

逻辑与 (&&)
作用:当且仅当所有操作数均为 true 时,结果为 true;否则为 false。
特性:如果第一个操作数为 false,不会计算第二个操作数。
语法:表达式1 && 表达式2
举例说明:
bool a = true, b = false;
bool result = a && b; // false(因为 b 为 false)

逻辑或 (||)
作用:只要有一个操作数为 true,结果即为 true;只要当全为 false 时,结果为 false。
特性:如果第一个操作数为 true,不会计算第二个操作数。
语法:表达式1 || 表达式2
举例说明:
bool a = true, b = false;
bool result = a || b; // true(因为 a 为 true)

逻辑非 (!)
作用:对布尔值取反(true 变 false,false 变 true)。
语法:!表达式
举例说明:
bool a = false;
bool result = !a; // true(因为 a 被取反)

运算符优先级:
! > && > ||
逻辑非 ! 的优先级高于所有的关系运算符

逻辑运算布尔转换:
在C++ 中,任何非零值被视为 true;零值被视为 false

4、变量自增与自减运算
自增(++)和自减(–)是 C++ 中用于对变量进行加 1 或 减 1 操作的一元运算符。它们有两种形式:
前缀形式(++x) 和 后缀形式(x++),两者的行为有重要区别(计算顺序不同)。

前缀形式(++x/–x):先修改变量X的值,然后再使用变量X
int x = 5;
int y = ++x; // x先变成 6,然后 y = 6

后缀形式(x++/x–):先使用X的原值,然后再修改变量X的值
int x = 5;
int y = x++; // y = 5,然后 x 变成 6

5、三目运算
定义:是 C++ 中唯一的需要 3 个操作数的运算符,属于条件运算符。
一般形式:条件表达式 ? 表达式1 : 表达式2
执行逻辑:
若条件表达式 为真(非零),则返回 表达式1 的值;否则返回 表达式2 的值。
例如:
#include
int main() {
int a = 10, b = 20;
int max = (a > b) ? a : b; // 取a和b中的较大值
cout << "较大值: " << max ; // 输出 20
return 0;
}

三目运算的嵌套使用
可以嵌套,但可能降低可读性,请谨慎使用
例如:
以下代码实现,根据分数所在的区间给出成绩的等级(A、B、C、D)
int score = 85;
char grade = (score >= 90) ? ‘A’ :
(score >= 80) ? ‘B’ :
(score >= 60) ? ‘C’ : ‘D’;
替代方案:以上也可以改用 if-else if 或 switch 结构实现。

6、位运算
定义
位运算(Bitwise Operations)是指直接对整数的二进制位进行操作,常用于底层编程、性能优化和某些特定算法(如加密、压缩、位掩码等)。

  1. 按位与 (&)
    功能:两个操作数的对应二进制位均为 1 时,结果位才为 1,否则为 0。
    即:0&0等于0,0&1等于0,1&0等于0,1&1等于1。
    用途:掩码操作、清除特定位(那位清零就和0按位与,那位保留就和1按位与)。
    举例说明:
    int a = 5; // 5转换为二进制: 0101
    int b = 3; // 3转换为二进制: 0011
    int c = a & b; // 结果: 0001 (十进制 1)

  2. 按位或 |
    功能:两个操作数的对应二进制位有一个为 1 时,结果位为 1。
    即:0| 0等于0,0| 1等于1,1| 0等于1,1| 1等于1。
    用途:设置特定位(那位设置为1,就和1按位或)。
    举例说明:
    int a = 5; // 5转换为二进制:0101
    int b = 3; // 3转换为二进制:0011
    int c = a | b; // 0111 (十进制 7)

  3. 按位非 ~
    功能:对操作数的每一位取反(0 变 1,1 变 0)。
    注意:结果依赖整数类型位数(如 ~int(0) 在 32 位系统为 0xFFFFFFFF)。
    举例说明:
    int a = 5; // 0000…0101
    int b = ~a; // 1111…1010 (补码表示,十进制 -6)

  4. 按位异或 ^
    功能:两个操作数的对应二进制位不相同的时候,结果位为 1,否则为 0。
    即:0 ^ 0等于0,0 ^ 1等于1,1 ^ 0等于1,1^1等于0。
    特性:
    任何数异或自身结果为 0(a ^ a = 0)。
    支持交换变量(无需临时变量):
    int x = 10, y = 20;
    x = x ^ y;
    y = x ^ y;
    x = x ^ y; // 交换后 x=20, y=10
    举例说明:
    int a = 5; // 0101
    int b = 3; // 0011
    int c = a ^ b; // 0110 (十进制 6)

  5. 左移 <<
    功能:将操作数的二进制位向左移动指定位数,低位补 0。
    数学意义:等价于乘以 2的n次方(无溢出时)。
    举例说明:
    int a = 5; // 0101
    int b = a << 2; // 010100 (十进制 20)

  6. 右移 >>
    功能:将操作数的二进制位向右移动指定位数。
    注意:
    有符号数:高位补符号位(算术右移)。
    无符号数:高位补 0(逻辑右移)。
    举例说明:
    int a = 20; // 010100
    int b = a >> 2; // 000101 (十进制 5)

位运算的常见应用场景
快速判断奇偶:
bool isOdd = (num & 1); // 末位为1则是奇数
掩码操作:
const int MASK = 0xFF; // 保留低8位: value & MASK
权限控制:
enum Permissions { READ = 1, WRITE = 2, EXEC = 4 };
int userPerm = READ | WRITE; // 组合权限
优化计算:
int powerOfTwo = 1 << n; // 计算2^n

注意事项
符号位问题:右移有符号数时需谨慎(可能引发未定义行为)。
可读性:过度使用位运算会降低代码可读性,建议加注释。
性能:现代编译器会自动优化乘除为位运算(如 x*2 → x<<1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

papership

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

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

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

打赏作者

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

抵扣说明:

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

余额充值