C++--运算符

2023-11-11

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
杂项运算符
本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。
算术运算符
下表显示了 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
    实例
    请看下面的实例,了解 C++ 中可用的算术运算符。
    复制并粘贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。
    实例
    #include
    using namespace std;

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
关系运算符
下表显示了 C++ 支持的关系运算符。
假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 描述 实例
== 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 不为真。
!= 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真。

检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 不为真。
< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) 为真。
= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 不为真。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真。
实例
请看下面的实例,了解 C++ 中可用的关系运算符。
复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。
实例
#include
using namespace std;

int main()
{
int a = 21;
int b = 10;
int c ;

if( a == b )
{
cout << “Line 1 - a 等于 b” << endl ;
}
else
{
cout << “Line 1 - a 不等于 b” << endl ;
}
if ( a < b )
{
cout << “Line 2 - a 小于 b” << endl ;
}
else
{
cout << “Line 2 - a 不小于 b” << endl ;
}
if ( a > b )
{
cout << “Line 3 - a 大于 b” << endl ;
}
else
{
cout << “Line 3 - a 不大于 b” << endl ;
}
/* 改变 a 和 b 的值 */
a = 5;
b = 20;
if ( a <= b )
{
cout << “Line 4 - a 小于或等于 b” << endl ;
}
if ( b >= a )
{
cout << “Line 5 - b 大于或等于 a” << endl ;
}
return 0;
}
当上面的代码被编译和执行时,它会产生以下结果:
Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 a
逻辑运算符
下表显示了 C++ 支持的关系逻辑运算符。
假设变量 A 的值为 1,变量 B 的值为 0,则:
运算符 描述 实例
&& 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假。
|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真。
! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(A && B) 为真。
实例
请看下面的实例,了解 C++ 中可用的逻辑运算符。
复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。
实例
#include
using namespace std;

int main()
{
int a = 5;
int b = 20;
int c ;

if ( a && b )
{
cout << “Line 1 - 条件为真”<< endl ;
}
if ( a || b )
{
cout << “Line 2 - 条件为真”<< endl ;
}
/* 改变 a 和 b 的值 */
a = 0;
b = 10;
if ( a && b )
{
cout << “Line 3 - 条件为真”<< endl ;
}
else
{
cout << “Line 4 - 条件不为真”<< endl ;
}
if ( !(a && b) )
{
cout << “Line 5 - 条件为真”<< endl ;
}
return 0;
}
当上面的代码被编译和执行时,它会产生以下结果:
Line 1 - 条件为真
Line 2 - 条件为真
Line 4 - 条件不为真
Line 5 - 条件为真
位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101

A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
下表显示了 C++ 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:
运算符 描述 实例
& 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 (A & B) 将得到 12,即为 0000 1100
| 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 (A | B) 将得到 61,即为 0011 1101
^ 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 (A ^ B) 将得到 49,即为 0011 0001
~ 二进制补码运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0。 (~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
<< 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 A << 2 将得到 240,即为 1111 0000

二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 A >> 2 将得到 15,即为 0000 1111
实例
请看下面的实例,了解 C++ 中可用的位运算符。
复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。
实例
#include
using namespace std;

int main()
{
unsigned int a = 60; // 60 = 0011 1100
unsigned int b = 13; // 13 = 0000 1101
int c = 0;

c = a & b; // 12 = 0000 1100
cout << "Line 1 - c 的值是 " << c << endl ;

c = a | b; // 61 = 0011 1101
cout << "Line 2 - c 的值是 " << c << endl ;

c = a ^ b; // 49 = 0011 0001
cout << "Line 3 - c 的值是 " << c << endl ;

c = ~a; // -61 = 1100 0011
cout << "Line 4 - c 的值是 " << c << endl ;

c = a << 2; // 240 = 1111 0000
cout << "Line 5 - c 的值是 " << c << endl ;

c = a >> 2; // 15 = 0000 1111
cout << "Line 6 - c 的值是 " << c << endl ;

return 0;
}
当上面的代码被编译和执行时,它会产生以下结果:
Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15
赋值运算符
下表列出了 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
实例
请看下面的实例,了解 C++ 中可用的赋值运算符。
复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。
实例
#include
using namespace std;

int main()
{
int a = 21;
int c ;

c = a;
cout << "Line 1 - = 运算符实例,c 的值 = : " <<c<< endl ;

c += a;
cout << "Line 2 - += 运算符实例,c 的值 = : " <<c<< endl ;

c -= a;
cout << "Line 3 - -= 运算符实例,c 的值 = : " <<c<< endl ;

c *= a;
cout << "Line 4 - *= 运算符实例,c 的值 = : " <<c<< endl ;

c /= a;
cout << "Line 5 - /= 运算符实例,c 的值 = : " <<c<< endl ;

c = 200;
c %= a;
cout << "Line 6 - %= 运算符实例,c 的值 = : " <<c<< endl ;

c <<= 2;
cout << "Line 7 - <<= 运算符实例,c 的值 = : " <<c<< endl ;

c >>= 2;
cout << "Line 8 - >>= 运算符实例,c 的值 = : " <<c<< endl ;

c &= 2;
cout << "Line 9 - &= 运算符实例,c 的值 = : " <<c<< endl ;

c ^= 2;
cout << "Line 10 - ^= 运算符实例,c 的值 = : " <<c<< endl ;

c |= 2;
cout << "Line 11 - |= 运算符实例,c 的值 = : " <<c<< endl ;

return 0;
}
当上面的代码被编译和执行时,它会产生以下结果:
Line 1 - = 运算符实例,c 的值 = 21
Line 2 - += 运算符实例,c 的值 = 42
Line 3 - -= 运算符实例,c 的值 = 21
Line 4 - *= 运算符实例,c 的值 = 441
Line 5 - /= 运算符实例,c 的值 = 21
Line 6 - %= 运算符实例,c 的值 = 11
Line 7 - <<= 运算符实例,c 的值 = 44
Line 8 - >>= 运算符实例,c 的值 = 11
Line 9 - &= 运算符实例,c 的值 = 2
Line 10 - ^= 运算符实例,c 的值 = 0
Line 11 - |= 运算符实例,c 的值 = 2
杂项运算符
下表列出了 C++ 支持的其他一些重要的运算符。
运算符 描述
sizeof sizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。
Condition ? X : Y 条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。
, 逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
.(点)和 ->(箭头) 成员运算符用于引用类、结构和共用体的成员。
Cast 强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。
& 指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。

  • 指针运算符 * 指向一个变量。例如,var; 将指向变量 var。
    C++ 中的运算符优先级
    运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
    例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3
    2,然后再加上 7。
    下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
    类别 运算符 结合性
    后缀 () [] -> . ++ - - 从左到右
    一元 + - ! ~ ++ - - (type)* & sizeof 从右到左
    乘除 * / % 从左到右
    加减 + - 从左到右
    移位 << >> 从左到右
    关系 < <= > >= 从左到右
    相等 == != 从左到右
    位与 AND & 从左到右
    位异或 XOR ^ 从左到右
    位或 OR | 从左到右
    逻辑与 AND && 从左到右
    逻辑或 OR || 从左到右
    条件 ?: 从右到左
    赋值 = += -= *= /= %=>>= <<= &= ^= |= 从右到左
    逗号 , 从左到右
    实例
    请看下面的实例,了解 C++ 中运算符的优先级。
    复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序。
    对比有括号和没有括号时的区别,这将产生不同的结果。因为 ()、 /、 * 和 + 有不同的优先级,高优先级的操作符将优先计算。
    实例
    #include
    using namespace std;

int main()
{
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;

e = (a + b) * c / d; // ( 30 * 15 ) / 5
cout << "(a + b) * c / d 的值是 " << e << endl ;

e = ((a + b) * c) / d; // (30 * 15 ) / 5
cout << "((a + b) * c) / d 的值是 " << e << endl ;

e = (a + b) * (c / d); // (30) * (15/5)
cout << "(a + b) * (c / d) 的值是 " << e << endl ;

e = a + (b * c) / d; // 20 + (150/5)
cout << "a + (b * c) / d 的值是 " << e << endl ;

return 0;
}
当上面的代码被编译和执行时,它会产生以下结果:
(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++--运算符 的相关文章

随机推荐

  • Java dom4j如何获取,添加,删除,查找,设置Element属性呢?

    转自 Java dom4j如何获取 添加 删除 查找 设置Element属性呢 下文讲述dom4j操作Element属性的方法分享 如下所示 取得某节点下的某属性 Element root document getRootElement A
  • 24.绳子切割

    目录 题目 Description Input Output 思路 注意事项 C 完整代码 题目 Description 有N条绳子 它们的长度分别为Li Li都是正整数 如果从它们中切割出K条长度相同的绳子 绳子的长度为整数 这K条绳子每
  • Windows7不再卡五叶草,更新了bootx64.efi和bootmgfw.efi文件,支持安全启动,不用关闭安全启动和打开csm支持.

    如题 微软最近为Windows7的64位系统更新了bootx64 efi和bootmgfw efi文件 然后Windows7的64位系统就支持了更新的平台 而且支持安全启动 不用关闭安全启动和打开csm支持 已在Intel10代和12代平台
  • Gitlab----设置页面语言为简体中文

    原文链接 1 简介 gitlab为每个用户提供了个性化设置 即用户登录之后设置页面的语言之后 并不影响其他人的页面的语言 如此就解决了有的人喜欢看中文界面 有的人喜欢看英文界面 当然如果会其他国语言也可以同样设置自己喜欢的语言 2 用户登录
  • Unity动画控制

    1 Trigger控制动画状态重复播放
  • 判断一个对象是否存在某个属性

    一 OBJ hasOwnProperty 属性 返回一个布尔值 只判断该对象自身的属性 不会去查找原型链上的属性 二 OBJ 或者 OBJ 去访问该属性 如果不存在就会返回undefined 这个方法可以查找原型链上的属性 这里有一个特殊情
  • ssh免密登录,各种权限设置都无效的解决办法!

    如果失败 有可能是以下原因 1 权限问题 这个还得试试 有可能你的权限真的不对 ssh目录 以及 home 当前用户 需要700权限 参考以下操作调整 sudo chmod 700 ssh sudo chmod 700 home 当前用户
  • Python打乱数据集

    在随机划分训练集和测试集时 需要随机划分 使用这种方法 一 打乱索引 import random random seed seed index i for i in range len x train random shuffle inde
  • linux定时删除指定文件shell脚本

    vi delete sh 输入以下内容 bin bash data path home test logs expire time 1 function deletefiles for file in find 1 name Default
  • vscode安装node-snippets

    vscode安装node snippets扩展后没有代码提示问题 安装好扩展后 输入node后仍没有代码提示 需要观察自己的代码所在文件路径是否全是英文路径 然后大多都以了 如果还有不行 就尝试在设置里面输入prevent 取消下面的选中
  • windows下如何安装高版本的jaxlib

    https zhuanlan zhihu com p 498404068
  • Vue2手捏Vuex插件

    一 展示数据 state 1 plugins Vuex js let Vue class Store constructor options 1 保存数据 通过 vue 中的 data 是响应式 this vm new Vue data s
  • C语言百日刷题第九天

    前言 今天是刷题第9天 放弃不难 但坚持一定很酷 快来跟我一起刷题吧 加油 一起努力进步 C语言百日刷题第九天 前言 76 计算偶数的所有质因子 77 提取不重复的整数 78 二进制中1的个数 79 猴子分桃 80 百钱买百鸡 76 计算偶
  • Typora-Markdown 文本编辑器

    图片 md test png img src md test png height 300 时序图 实线 gt gt gt 虚线 gt gt gt 背景 rect rgb 244 244 255 end 列子 mermaid sequenc
  • SSM商城项目实战:客户管理

    SSM商城项目实战 客户管理 1 项目背景和需求分析 在一个电商平台中 客户管理是非常重要的一环 通过对客户信息的管理 可以更好地了解客户需求 提供个性化的服务 增强客户满意度 本项目旨在实现一个简单的客户管理功能 包括客户信息的添加 修改
  • react组件权限控制+路由权限+路由懒加载

    组件控制 permission js import React useEffect useState useContext from react const PermissionContext React createContext per
  • [~/vulhub]/log4j/CVE-2021-44228-20221225

    vulhub log4j CVE 2021 44228 kwkl kwkl vulhub cd log4j CVE 2021 44228 kwkl kwkl vulhub log4j CVE 2021 44228
  • flutter 对象模型的理解

    如果要传值 传一个int值时就很简单了 类型就是int 如果我们要传好多个值呢 里面有int 也有String 也会有列表 对象 当然我们也可以一个个传 问题是这样子很麻烦 我们可以将这些不同的类型数据堆到一个模型里面 然后传这个模型 也就
  • 为了搞清楚CDN的原理,我头都秃了...

    点击上方 前端Q 关注公众号 回复加群 加入前端Q技术交流群 作者 winty的帆宝宝 原文地址 https juejin cn post 6944420222757503006 今天下班前忽然发现维护的项目网站打不开了 打开控制台一看 原
  • C++--运算符

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号 C 内置了丰富的运算符 并提供了以下类型的运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐一介绍算术运算符 关系运算符 逻辑运算符 位运算符 赋值运