C++ 基础 - 4 - 运算符号

简言

什么是运算符?

在C++中运算符其实就是一种功能性符号,用于执行特定的数学或逻辑计算,比如加法、减法、乘法、赋值等。它们可以用于操作变量和值,以执行程序中的不同任务

C++有几种运算符?

  1. 算数运算符
  2. 关系运算符
  3. 逻辑运算符
  4. 位运算符
  5. 赋值运算符
  6. 条件运算符(三元运算符)
  7. 逗号运算符
  8. 成员访问运算符
  9. 指针相关运算符
  10. 其它类型运算符

它们有什么使用规则?

  1. 运算符在程序执行中会严格遵守运算符的优先级
  2. 根据运算符的优先级从重到轻依次执行程序运算
  3. 当两个运算符的优先级相同时将会从左至右执行

算数运算符

用于执行基础的数学计算

#include  <iostream>

int main()
{
	int Ret;
	Ret = 1+1; // 加法 运算符
 	std::cout<< Ret << std::endl;
 	Ret = 2-1; // 减法 运算符
 	std::cout<< Ret << std::endl;
 	Ret = 4*5; // 乘法 运算符
 	std::cout<< Ret << std::endl;
 	Ret = 20/4; // 除法 运算符
 	std::cout<< Ret << std::endl;
 	Ret = 7%2; //取模 运算符或称为 求余 运算符,用于计算两个整数相除后的余数
 	std::cout<< Ret << std::endl;
 	int ret = 5;
 	/*
	* 自增运算符 - 变量值自动加一
	* 自减运算符 - 变量值自动减一
	* 自增自减 通常在流程控制语句中常用
	*/
	++ret; // 右自增 - 先运算 后使用 - 先变成6 然后使用
	std::cout<< ret << std::endl;
	ret++; // 左自增 - 先使用 后运算 - 先使用 然后变成7
	std::cout<< ret << std::endl;
	--ret; // 左自减 - 先运算 后使用 - 先变成6 然后使用
	std::cout<< ret << std::endl;
	ret--; // 右自减 - 先使用 后运算 - 先使用 然后变成5
	std::cout<< ret << std::endl;
	return 0;
}

关系运算符

用于比较两个值之间的大小

#include  <iostream>

int main()
{
	bool Ret;
	Ret = (5 > 3); // 大于 运算符
	std::cout<< Ret << std::endl;
	Ret = (5 < 3); // 小于 运算符
 	std::cout<< Ret << std::endl;
 	Ret = (5 >= 5); // 大于等于 运算符
 	std::cout<< Ret << std::endl;
 	Ret = (5 <= 5); // 小于等于 运算符
 	std::cout<< Ret << std::endl;
 	Ret = (5 == 5); //等等于 运算符 - 判断两值是否相等或相同
 	std::cout<< Ret << std::endl;
 	Ret = (5 != 3); // 不等于 运算符 - 判断两值是否不等或不同
 	std::cout<< Ret << std::endl;
	return 0;
}

逻辑运算符

用于逻辑判断

#include  <iostream>

int main()
{
	bool Ret;
	Ret = (true && false); // 与 运算符 - 两个条件都为真时结果才为真 - 真真 = 真
	std::cout<< Ret << std::endl;
	Ret = (true || false); // 或 运算符 - 其中一个条件为真结果就为真 - 真假 / 假真 = 真
 	std::cout<< Ret << std::endl;
 	Ret = !(true); // 非 运算符 / 取反符 - 真为假 假为真 - 真 = 假 / 假 = 真
 	std::cout<< Ret << std::endl;
	return 0;
}

位运算符

对整数的二进制位进行操作

#include  <iostream>

int main()
{
	int Ret;
	Ret = (5 & 3); // 按位与 运算符 - 二进制表示为0101 & 0011 = 0001,因此结果为1
	std::cout<< Ret << std::endl;
	Ret = (5 | 3); // 按位或 运算符 - 二进制表示为0101 | 0011 = 0111,因此结果为7
	std::cout<< Ret << std::endl;
	Ret = (5 ^ 3); // 按位异或 运算符 - 二进制表示为0101 ^ 0011 = 0110,因此结果为6
	std::cout<< Ret << std::endl;
	Ret = (~5); // 按位取反 运算符 - 二进制表示为~0101,结果取决于整数的大小和表示方式,通常为负数
	std::cout<< Ret << std::endl;
	Ret =  (5 << 1); // 左移 运算符 - 二进制表示为0101 << 1 = 1010,因此结果为10
	std::cout<< Ret << std::endl;
	Ret = (5 >> 1); // 右移 运算符 - 二进制表示为0101 >> 1 = 0010,因此结果为2
	std::cout<< Ret << std::endl;
	return 0;
}

赋值运算符

用于为变量赋值

#include  <iostream>

int main()
{
	int Ret;
	Ret = 5; // 赋值运算符 - 为变量赋值 / 重新赋值
	std::cout<< Ret << std::endl;
	Ret += 5; // 复合型赋值运算符 - 用变量原来的值加上新值然后重新赋值给变量 Ret = Ret+5;
	std::cout<< Ret << std::endl;
	Ret -= 3; // 相当于 Ret = Ret - 3;
	std::cout<< Ret << std::endl;
	Ret *= 2; // 相当于 Ret = Ret * 2;
	std::cout<< Ret << std::endl;
	Ret /= 2; // 相当于 Ret = Ret / 3;
	std::cout<< Ret << std::endl;
	Ret %= 3; // 相当于 Ret = Ret % 3;
	std::cout<< Ret << std::endl;
	Ret <<= 2; // 相当于 Ret = Ret << 2;
	std::cout<< Ret << std::endl;
	Ret >>= 2; // 相当于 Ret = Ret >> 2;
	std::cout<< Ret << std::endl;
	Ret &= 3; // 相当于 Ret = Ret & 3;
	std::cout<< Ret << std::endl;
	Ret ^= 3; // 相当于 Ret = Ret ^ 3;
	std::cout<< Ret << std::endl;
	Ret |= 3; // 相当于 Ret = Ret | 3;
	std::cout<< Ret << std::endl;
	return 0;
}

条件运算符(三元运算符)

条件运算符 又称 三元运算符 语法: 条件表达式 ? 表达式1 : 表达式2

这个运算符的工作方式如下:

先计算“条件表达式”的值
如果条件表达式的值为真(即非零),则整个条件运算符的结果是“表达式1”的值。
如果条件表达式的值为假(即零),则整个条件运算符的结果是“表达式2”的值。

#include  <iostream>

int main()
{
	int a = 5;  
	int b = 10;  
	int max = (a > b) ? a : b;
	// max会被赋值a与b中最大的值,如果a大于b则 max会被a赋值,如果b大于a则 max会被b赋值
	std::cout<< Ret << std::endl;
	return 0;
}

逗号运算符

将多个表达式用逗号分隔开 语法: 表达式1, 表达式2, 表达式n
逗号运算符在for循环中经常被使用,特别是在需要同时更新多个变量时

#include  <iostream>

int main()
{
	for (int i = 0, j = 10; i < j; i++, j--) {  
	// 定义变量i,j 如果i小于j则i自增否则j自减 - 流程控制 后续会学
    std::cout << i << endl;
	}
	return 0;
}

成员访问运算符

成员访问运算符有两种: 直接访问,指针访问

#include  <iostream>

int main()
{
	// 在以后学会了类与对象时我们会经常用到 目前先大致了解一下
	// 直接访问
	Person person;  
	person.name = "John Doe";
	// 指针访问
	Person* personPtr = &person;  
	personPtr->name = "Jane Doe";
	return 0;
}

指针相关运算符

指针相关的运算符有三种: 取址运算符、间接寻址运算符、指针算数运算符
指针算术运算只适用于指向同一数组(或连续内存块)的指针。
指针与整数的乘法或除法运算在C++中是不合法的,因为这样的运算没有实际意义。
在进行指针运算时,需要确保指针指向的内存区域是有效的,以避免未定义行为(如访问越界内存)

#include  <iostream>

int main()
{
	// 取址运算符 - 用于获取变量的内存地址
	// 语法: 在变量前加上&运算符,即可得到该变量的地址
	int a = 10;  
	int* ptr = &a; // ptr现在存储了变量a的地址
	// 间接寻址运算符 - 也称为解引用运算符,用于访问指针所指向的内存地址中的值
	// 语法: 在指针变量前加上*运算符,即可得到指针所指向的值
	int a = 10;  
	int* ptr = &a;  
	int b = *ptr; // b现在等于a的值,即10
	// 指针算数运算符 - 用于移动指针,指向新的内存地址
	// 语法: 指针变量加上或减去一个整数,指针将按照指向数据类型的大小移动相应的字节数
	int arr[5] = {1, 2, 3, 4, 5};  
	int* ptr = arr; // ptr指向arr[0]  
	ptr++; // ptr现在指向arr[1]  
	ptr += 2; // ptr现在指向arr[3]
	return 0;
}

其它类型运算符

跳出符号外 不在符号中 这里说的其它运算符不一定是运算符,也包含了C++基本库的函数

#include  <iostream>

int main()
{
	// sizeof函数 - 用于确定变量或数据类型所占用的内存大小(以字节为单位)
	// 变量
	int a;
	std::cout << sizeof(a); // 输出 int 类型所占用的字节数,通常是 4
	// 数据类型
	std::cout << sizeof(int); // 输出 int 类型所占用的字节数
	// 指针
	int* p = new int;  // 当 sizeof 用于指针时,它返回指针变量所占用的内存大小,而不是指针所指向的内存大小
	std::cout << sizeof(p); // 输出指针变量所占用的字节数,通常是 4 或 8,取决于平台
	// 数组
	int arr[10];  // 当 sizeof 用于数组时,它返回整个数组所占用的内存大小
	std::cout << sizeof(arr); // 输出数组 arr 所占用的字节数,通常是 40
}

运算符优先级

优先级运算符描述结合性
1::范围解析自左向右
2()[].->函数调用、数组下标、成员访问自左向右
3++(前缀)、--(前缀)、+-!~*&newnew[]deletedelete[]sizeof(类型)自增、自减、正负号、逻辑非、按位取反、取地址、类型转换、动态内存分配与释放、大小自右向左
4*/%乘法、除法、取余自左向右
5+-加法、减法自左向右
6<<>>按位左移、按位右移自左向右
7<<=>>=小于、小于等于、大于、大于等于自左向右
8==!=等于、不等于自左向右
9&按位与自左向右
10^按位异或自左向右
11``按位或
12&&逻辑与自左向右
13``
14?:条件运算符(三目运算符)自右向左
15=+=-=*=/=%=&=^=、`=<<=>>=`赋值运算符及其复合形式
16throw抛出异常-
17,逗号运算符(用于分隔表达式)自左向右
  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

OasisPioneer

与我一起用代码改变生活!

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

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

打赏作者

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

抵扣说明:

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

余额充值