C++青少年简明教程:运算符

C++青少年简明教程:运算符

C++ 中的运算符是用于执行操作的符号,用于执行各种数据类型上的运算。运算符可以分为几大类:算术运算符、比较运算符(关系运算符)、逻辑运算符、位运算符、赋值运算符和其他特殊运算符。

★赋值运算符:用于将值分配给变量,将右侧的值赋给左侧的变量。C++的赋值运算符:

= (赋值) 例如:int num = 10;  // 将10赋值给num

+= (加赋值)

-= (减赋值)

*= (乘赋值)

/= (除赋值)

%= (取余赋值)

★算术运算符:用于执行基本数学运算,如加法、减法、乘法和除法等。

☆加法运算符:x + y

☆减法运算符:x - y

☆乘法运算符:x * y

☆除法运算符:x / y。C++中,x / y需要注意数据类型,具体来说,如果两个操作数都是整数类型(如int、long等),则在进行除法运算时,C++会将结果截断为整数部分,舍弃小数部分。例如:

int x = 7;

int y = 2;

int result = x / y;  // 结果为3,舍弃了小数部分

如果其中一个操作数是浮点数类型(float、double),那么 C++ 将执行浮点除法,结果将是一个浮点数。

☆取余运算符: %   如: 7 % 3 的结果为 1,因为 7 除以 3 的余数是 1

☆自增/自减运算符: ++ 和 --

例如:

自增/自减运算符 ++ 和 -- 可以使变量的值增加或减少 1。++ 使变量的值增加,-- 使变量的值减少。这两个运算符可以出现在变量前面和后面,分别称为前缀和后缀形式。前缀形式(如++i、--i)表示先进行自增/自减运算,然后再使用变量的值。后缀形式(如i++、i--)表示先使用变量的值,然后再进行自增/自减运算。下面是一个例子:

#include <iostream>
using namespace std;

int main() {
	int i=0;
    cout << ++i << endl;    // 输出1。先将i增加到1,然后再输出它的值。
    int j=0;
    cout << j++ << endl;    // 输出0。先输出j的当前值0,然后再将j增加到1。
}

☆复合运算符

C++ 算术运算符包括复合运算符。复合运算符是一种结合了算术运算符和赋值运算符的运算符。它们执行算术运算并将结果存储回一个变量中。一些常用的复合运算符及其作用:

+=:将右操作数与左操作数相加,并将结果赋值给左操作数。例如,x += y 相当于 x = x + y。

-=:将右操作数从左操作数中减去,并将结果赋值给左操作数。例如,x -= y 相当于 x = x - y。

*=:将右操作数与左操作数相乘,并将结果赋值给左操作数。例如,x *= y 相当于 x = x * y。

/=:将左操作数除以右操作数,并将结果赋值给左操作数。例如,x /= y 相当于 x = x / y。

%=:将左操作数除以右操作数的余数赋值给左操作数。例如,x %= y 相当于 x = x % y。

★逻辑运算符:用于执行逻辑运算。

☆与(AND)运算符&&,表示的关系:x && y  //当x和y都为真时,结果为真。

☆或(OR)运算符||,表示的关系:x || y   //当x和y有一个为真时,结果为真。

☆非(NOT)运算符!它表示取反:!x

提示:在C++中,true和false是预定义的值,其对应的整数值是1和0,分别表示真和假。

例子:

int num1 = 5;

int num2 = 3;

bool isTrue1 = (num1 > 0 && num2 < 10);  // 结果为true即1

bool isTrue2 = (num1 > 0 || num2 < 1);  // 结果为true即1

bool isTrue3 =! (num2 < 1);  // 结果为true即1

★关系运算符(比较运算符):用于比较两个值之间的关系。

例如:

☆等于运算符:x == y

☆不等于运算符:x != y

☆大于运算符:x > y

☆小于运算符:x < y

☆大于等于运算符:x >= y

☆小于等于运算符:x <= y

★位运算符(初学者暂不学)

在 C++ 中,位运算符用于对整数对应的二进制数的位进行操作。二进制逻辑运算符只能对整数类型进行操作,不能用于浮点数。

按位与(&):对两个操作数的每个对应位执行逻辑与操作,只有当两个位都为1时,结果才为1。

按位或(|):对两个操作数的每个对应位执行逻辑或操作,只要有一个位为1,结果就为1。

按位异或(^):对两个操作数的每个对应位执行逻辑异或操作,当两个位不同时,结果为1。

按位取反(~):对操作数的每个位取反,即0变为1,1变为0。

左移(<<):将操作数的所有位向左移动指定的位数,右侧的空位用0填充。

右移(>>):将操作数的所有位向右移动指定的位数,左侧的空位用0或者符号位填充(取决于是无符号还是有符号数据类型)。

例子

#include <iostream>
using namespace std;

int main() {
    int a = 5;   // 二进制表示为 0101
    int b = 3;   // 二进制表示为 0011

    int result = a & b;  // 二进制按位与操作:0001,结果是1
    cout << "Bitwise AND: " << result << endl;

    result = a | b;  // 二进制按位或操作:0111,结果是7
    cout << "Bitwise OR: " << result << endl;

    result = a ^ b;  // 二进制按位异或操作:0110,结果是6
    cout << "Bitwise XOR: " << result << endl;

    result = ~a;  // 二进制按位取反操作:1010,结果是-6(补码表示)
    cout << "Bitwise NOT: " << result << endl;

    result = a << 2;  // 左移两位:010100,结果是20
    cout << "Left shift: " << result << endl;

    result = b >> 1;  // 右移一位:0001,结果是1
    cout << "Right shift: " << result << endl;

    return 0;
}

C++ 运算符优先级和结合性

运算符优先级:运算符优先级规定了在没有显式括号的情况下,哪一个运算符会先被求值。例如,乘法运算符(*)的优先级高于加法运算符(+),所以在表达式3 + 4 * 5中,乘法会先执行。常见运算符优先级:赋值运算符 < 逻辑运算符 < 关系运算符 < 算术运算符

结合性:结合性规定了当多个运算符具有相同优先级时,运算的执行方向。运算符可以是左结合的(left-associative)或右结合的(right-associative)。

运算符优先级

例如

int result = 3 + 4 * 5;

在这个表达式中,乘法运算符(*)的优先级高于加法运算符(+),因此,乘法会首先执行:

4 * 5 = 20

然后再进行加法运算:

3 + 20 = 23

所以,result的值是23。

结合性

例如:

int result = 5 - 3 - 1;

减法运算符(-)是左结合的,这意味着从左到右依次进行计算:

首先计算第一个减法:

5 - 3 = 2

然后计算第二个减法:

2 - 1 = 1

所以,result的值是1。

赋值运算符(=)是右结合的。例如:

int a, b, c;

a = b = c = 10;

赋值运算符是右结合的,因此从右到左依次进行计算:

首先,c = 10,所以c的值是10。

然后,b = c,因为c的值是10,所以b的值也是10。

最后,a = b,因为b的值是10,所以a的值也是10。

使用括号可以明确地指定表达式的求值顺序,并覆盖默认的运算符优先级和结合性。当对运算符优先级和结合性不清楚时,使用括号是一个非常好的做法。括号可以明确指定计算顺序,从而避免因运算符优先级和结合性引起的歧义和错误。

例如:

int a, b, c;

a = b = c = 10;

可以改写为:

为了确保理解正确,可以添加括号(虽然在这个例子中不需要):

int a, b, c;

a = (b = (c = 10));

这明确表示赋值顺序是从右向左。

下表将按运算符优先级从高到低列出各个运算符,表中靠前的优先级高于后面的。在表达式中,较高优先级的运算符会优先被计算。

类别 

运算符 

结合性 

后缀 

() [] -> . ++ - -  

从左到右 

一元 

+ - ! ~ ++ - - (type)* & sizeof 

从右到左 

乘除 

* / % 

从左到右 

加减 

+ - 

从左到右 

移位 

<< >> 

从左到右 

关系 

< <= > >= 

从左到右 

相等 

== != 

从左到右 

位与 AND 

从左到右 

位异或 XOR 

从左到右 

位或 OR 

从左到右 

逻辑与 AND 

&& 

从左到右 

逻辑或 OR 

|| 

从左到右 

条件 

?: 

从右到左 

赋值 

= += -= *= /= %=>>= <<= &= ^= |= 

从右到左 

逗号 

从左到右 

【附:详见 C++ Operator Precedence - C++ - API Reference Document

C++ 运算符优先级 - C++中文 - API参考文档

运算符总括

C++中常用的运算符及其描述如下:

  • 算术运算符:+、-、*、/、%(取模)
  • 比较运算符:==、!=、>、<、>=、<=
  • 逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)
  • 位运算符:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移)
  • 赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=

这些运算符的优先级和结合性如下:

  • 一元运算符(如取地址符&和解引用符*)的优先级高于二元运算符,但是结合性是从右向左的。
  • 算术运算符的优先级从高到低为:一元加/减、乘法/除法/求余、加法/减法。结合性都是从左向右的。
  • 比较运算符的优先级相同,高于逻辑运算符,结合性是从左向右的。
  • 逻辑运算符的优先级从高到低为:非、与、或。结合性都是从左向右的。
  • 位运算符的优先级从高到低为:按位取反、左移/右移、按位与、按位异或、按位或。结合性都是从左向右的。
  • 赋值运算符的优先级从高到低为:复合赋值运算符(如+=、-=等),等于号=。结合性是从右向左的。

注意:C++ 中的一些符号可能具有不同的含义,具体取决于上下文。例如:

% 运算符在数学运算中表示取模(取余数),而在字符串格式化中表示格式化的占位符。

<< 运算符在输出流中用于将数据插入到流中,例如,std::cout << "Hello, world!";位左移运算符,在二进制运算中,<< 运算符会将一个数的二进制位向左移动若干位,相当于将这个数乘以2的左移位数次方。例如,a << n 表示将整数 a 向左移动 n 位,左移后高位补零,低位舍弃。例如,整数 9 的二进制表示为 1001,执行 9 << 1 后,它的二进制表示变为 10010,十进制表示为 18。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习&实践爱好者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值