C++运算符简介

563 阅读4分钟

C++操作者介绍

操作符是帮助我们进行特定数学和逻辑操作数计算的符号。C++语言内置了几种类型的运算符。本文将介绍常用的运算符。

前提条件

要学习这篇文章,你需要具备以下条件。

  • 对C++语言有一个基本的了解。

  • 用于运行代码的[Codeblocks IDE]。

操作符和操作数的定义

操作符是一个符号,它告诉编译器它应该执行某种数学或逻辑操作。它们在[程序]中被用来[修改数据和变量]。

另一方面,操作数是任何数值、变量和常数,程序对其进行操作。

例如,考虑下面的语句。

a = x+y;

这里,+ 是加法运算符,xy 是操作数。

加法运算符指示编译器将xy 两个操作数相加。

赋值运算符

它们用于为一个变量赋值。在赋值运算符的左边,操作数是一个变量,而在右边,操作数是一个值。

被分配给变量的值必须与该变量的数据类型相同,否则编译器会产生错误。

赋值运算符的类型。

  • = - 它用于将赋值运算符右边的值赋给变量。

  • += - 它是运算符 和 的组合。首先,将变量的值加到右边的值上,然后将结果赋给变量。+ =

  • -= - 它是运算符 和 的组合。首先,它从右边的变量值中减去该值,然后将结果应用于该变量。- =

  • *= - 它是运算符 和 的组合。首先,变量的值乘以右边的值,然后将结果应用于变量。* =

  • /= - 它是运算符 和 的组合。首先,变量的值被右手边的值除以,然后将结果分配给变量。/ =

  • %= - 它是运算符 和 的组合。首先,找到变量当前值的余数除以右手的值,然后将结果分配给变量。% =

用程序说明赋值运算符的工作。

#include <iostream>
using namespace std;

int main() {
	int a = 6;
	int b = 3;

	cout << "a = " << (a += b)<< endl; // a = a + b
	cout << "a = " << (a -= b)<< endl; // a = a - b
	cout << "a = " << (a *= b)<< endl; // a = a * b
	cout << "a = " << (a /= b)<< endl; // a = a / b
	cout << "a = " << (a %= b)<< endl; // a = a % b

	return 0;
}

输出。

a = 9
a = 6
a = 18
a = 6
a = 0

在上面的程序中,当第一行代码被执行时,9被分配到a 。当程序执行第二行时,它将a ,而不是6。因此,在整个程序中a 的值取决于之前执行的最后一行代码的结果。

算术运算符

算术运算符是用于操作数/算术操作的运算符。

数学运算符的类型。

  • 单项运算符 - 它们只对一个操作数进行操作。例如。 ++ ,--

  • 二元运算符 - 它们对两个操作数进行操作。例如。 + ,,*,/

在增加和减少标量值时,有两个单项运算符。它们可以用在变量之前(前缀:++n)或变量之后(后缀:n++)。

在前缀模式下,它先增量(加1),然后使用值,而在后缀模式下,它先使用值,然后增量。这同样适用于递减(减1)运算符。

二进制运算符的分类如下。

  • + (加法)--将两个操作数相加。

  • (减法) - 减去两个操作数。

  • * (乘法) - 两个操作数相乘。

  • / (除法) - 将操作数相除,并将结果作为商值。

  • % (模数运算)--除法后给出余数作为结果。

程序说明算术运算符的工作。

#include <iostream>
using namespace std;

int main() {
	int x=5;
	int y=3;

	cout << "x + y = " << (x + y) << endl;
	cout << "x - y = " << (x - y) << endl;
	cout << "x * y = " << (x * y) << endl;
	cout << "x / y = " << (x / y) << endl;
	cout << "x % y = " << (x % y) << endl;
	cout<<" ++x : "<< ++x <<endl;
	cout<<" --x : "<< --x <<endl;
  cout<<" x++ : "<< x++ <<endl;
  cout<<" x-- : "<< x-- <<endl;
	cout<<" ++y : "<< ++y <<endl;
	cout<<" --y : "<< --y <<endl;
	cout<<" y++ : "<< y++ <<endl;
	cout<<" y-- : "<< y-- <<endl;

	return 0;
}

输出。

x + y = 8
x - y = 2
x * y = 15
x / y = 1
x % y = 2
++x : 6
--x : 5
x++ : 5
x-- : 6
++y : 4
--y : 3
y++ : 3
y-- : 4

关联运算符

关系运算符在比较操作数的值时使用。如果条件为真,将返回1,如果条件为假,将返回0。

  • == Is Equal To - 它确认给定的两个操作数是否相等。如果为真,则返回1,如果为假,则返回0。

  • ! = 不等于 - 它确认给定的两个操作数是否相等。如果为真,则返回1,如果为假,则返回0。

  • > 大于 - 它确认左边的操作数是否大于右边的操作数。如果为真,则返回1,如果为假,则返回0。

  • < 小于 - 它确认左边的操作数是否低于右边的操作数。如果为真,则返回1,为假则返回0。

  • >= 大于或等于 - 它确认左边的操作数是否大于右边的操作数或等于它。如果为真,则返回1,为假,则返回0。

  • <= 小于或等于 - 它确认左边的操作数是否小于右边的操作数或等于它。如果为真,则返回1,为假,则返回0。

说明关系运算符如何工作的程序。

#include <iostream>
using namespace std;
int main()
{
	int X, Y;
	X=5;
	Y=3;
	
	// equal to
	if (X == Y) {
		cout << "X == Y";
	}
	else {
		cout << "X != Y\n";
	}
	
	// not equal to
	if (X != Y) {
		cout << "X != Y\n";
	}
	else {
		cout << "X == Y\n";
	}
	
	// greater than example
	if (X > Y) {
		cout << "X > Y\n";
	}
	else {
		cout << "X < Y\n";
	}
	
	// less than example
	if (X < Y) {
		cout << "X < Y\n";
	}
	else {
		cout << "X > Y\n";
	}
	
	// greater than or equal to
	if (X >= Y) {
		cout << "X >= Y\n";
	}
	else {
		cout << "X < || != Y\n";
	}
	
	// lesser than or equal to
	if (X <= Y) {
		cout << "X <= Y\n";
	}
	else {
		cout << "X > || != Y\n";
	}
	
	return 0;
}

输出。

X != Y
X != Y
X > Y
X > Y
X >= Y
X > || != Y

逻辑运算符

这些运算符用于结合两个或更多的条件,或补充所考虑的初始条件评估。如果所考虑的表达式为真,它返回1。否则,它返回0。

C++中的逻辑运算符。

  • && 逻辑和--当所考虑的两个条件都满足时,它返回真。否则,返回错误。

  • || 逻辑OR。- 如果考虑中的一个或两个条件都满足,它返回真。否则,返回false。

  • ! - 如果所考虑的条件不满足,它返回真。否则,返回false。

用程序说明逻辑运算符的工作原理。

#include <iostream>
using namespace std;

int main()
{
	int w,x,y,z;
	w=20;
	x=5;
	y=10;
	z=10;

	if (w > x && y == z) {
		cout << "w is greater than x AND y is equal to z"<<endl;
	}
	else {
		cout << "AND condition not satisfied"<<endl;
	}
	
	if (w > x || y == z) {
		cout << "w is greater than x OR y is equal to z"<<endl;
	}
	else {
		cout << "Neither w is greater than x nor y is equal to z"<<endl;
	}
	
	if (!w) {
		cout << "w is zero"<<endl;
	}
	else {
		cout << "w is NOT zero"<<endl;
	}
	return 0;
}

输出。

w is greater than x AND y is equal to z
w is greater than x OR y is equal to z
w is NOT zero

逻辑&& 操作符的值为1,因为两个操作数都是真。逻辑|| 操作符的值也是1,因为其中一个操作数是真的。逻辑! 运算符评估为假,因为操作数是假的。

位操作符

位操作符用于对单个位进行操作。它们与intchar 数据类型一起使用。这些操作需要对各个位进行检查、设置或移动。由于位级的算术运算是由计算机CPU中的算术逻辑单元(ALU)进行的,所以需要这些运算。

位操作符的类型。

  • & 位数与运算 - 它以两个数字为操作数,对这两个数字的每个位进行与运算。只有当所有的位都是1时,AND的输出才是1。

  • | 位向OR - 它以两个数字作为操作数,对两个数字的每一位进行OR。

如果两个比特中的任何一个是1,OR的输出将是1,否则将返回一个0。

  • ^ Bitwise XOR - 以两个数字为操作数,在两个数字的每一位上执行XOR。如果它的两个位是不同的,那么XOR的结果就是1,否则就会返回0。

  • ~ Bitwise NOT - 取一个数字,并将其所有位数倒置。

  • << Bitwise Shift Left - 取两个数字,将第一个操作数的位向左移动,第二个操作数决定要移动的位置数。

  • >> 位向右移--它需要两个数字,将第一个操作数的位向右移,第二个操作数决定要移的位置。

用程序来说明位操作符的代码工作。

#include <iostream>
using namespace std;

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

	x = a & b; // 12 = 0000 1100
	cout << "The value of x: " << x << endl ;

	x = a | b; // 61 = 0011 1101
	cout << "The value of x: " << x << endl ;

	x = a ^ b; // 49 = 0011 0001
	cout << "The value of x: " << x << endl ;

	x = ~a; // -61 = 1100 0011
	cout << "The value of x: " << x << endl ;

	x = a << 2; // 240 = 1111 0000
	cout << "The value of x: " << x << endl ;

	x = a >> 2; // 15 = 0000 1111
	cout << "The value of x: " << x << endl ;
	return 0;
}

输出。

The value of x: 12
The value of x: 61
The value of x: 49
The value of x: -61
The value of x: 240
The value of x: 15

在上面的程序中,我们比较了两个整数6013 的各个位。正如我们之前所说,位操作符对各个位进行操作。我们的整数6013 的二进制格式是0011 11000000 1101 。该程序从比较后形成的二进制数字返回一个新的整数。例如在& 算子中我们有。

60 = 0011 1100
&
13 = 0000 1101
________________
12  = 0000 1100   //result after comparison

这里,当我们执行& 操作时,它首先比较整数6013 的每个单独的位。如果这两个整数的各个位都有1,程序将返回1。如果它们都没有1 ,将返回0

之后,由比较形成的二进制数字将转换为整数。因此,0000 1100 是与12 的比较结果。

在程序执行时,位数OR| 操作符会执行以下操作。

60 = 0011 1100
|
13 = 0000 1101
________________
61  = 0011 1101  //result after comparison

这里,当我们执行| 操作时,它首先比较整数6013 的每个独立位。如果这两个整数中的任何一个位有1,程序就会返回1。

如果它们都没有1 ,将返回一个0 。之后,由比较形成的二进制数字将转换为整数。因此,0011 1101 是比较的结果61

在程序执行时,位数XOR^ 运算器会执行以下操作。

60 = 0011 1100
^
13 = 0000 1101
_______________
49  = 0011 0001  //result after comparison

这里,当我们执行^ 操作时,它首先比较整数6013 的每个独立位。如果这两个位是不同的,XOR的结果就是1。

否则,将返回一个0。之后,比较后形成的二进制数字将转换为整数。因此,0011 0001 是比较的结果49

在程序执行时,位数NOT~ 算子会执行以下操作。

~60 = 0011 1100
________________
-61 = 1100 0011   //result after inverting

在这里,它与我们到目前为止所看的那些操作有些不同。它只在比较后取一个操作数,而不是在两边取操作数。对于任何一个单独的位,~ 算子都会颠倒一个数字:从0到1,从1到0。

当60的各个位被反转后,就形成了一个新的二进制数字。1100 0011 是反转了60 的各个位后形成的二进制数字,1100 0011 的整数形式是-61

当程序执行时,顺时针SHIFT LEFT<< 操作符执行以下操作。

60 = 0011 1100
60<<2
11 1100
0  		 // The two bits being shifted to the left
0

这里,不是比较两个整数的各个位,而是移位一个整数的位。我们要移位的整数,放在Bitwise SHIFT LEFT运算符的左边。

在右边,我们放置我们想要移位的数字。60 因此,例如,60 << 2 将把我们的整数2 位移到left 。如果我们从左边的正数(0)开始,那么所有的空位都填上0,如果从一个负数开始,最左边的位是1,所有的空位都填上1。

剩下的2个开放的内存位被替换成0,如下图所示。

60<<2
11 1100
0
0
= 11 1100 00  // The leftmost bit being a 1, two one's are added to replace the shifted bits
_____________
= 1111 0000 = 240 //result after shifting

之后,形成的二进制数字1111 0000 ,转换为十进制,成为240

当程序被执行时,顺时针方向的SHIFT RIGHT>> 操作符会执行以下操作。

60 = 0011 1100
60>>2
0011 11
0	//The two bits being shifted to the right
0

这里,不是比较两个整数的各个位,而是移位一个整数的位。我们要移位的整数,放在Bitwise SHIFT RIGHT运算符的左边。

在右边,我们放置要移位的数字。60 因此,例如,60 >> 2 将把我们的整数2 位移到left 。如果我们从右边的正数(0)开始,那么所有的空位都填上0,如果从一个负数开始,最右边的位是1,所有的空位都填上1。

剩下的2个开放的内存位被替换成1,如下图所示。

60>>2
0011 11
0
0
= 0000 1111  // The rightmost bit is a 1, two ones are added to replace the shifted bits
_____________
= 0000 1111 = 15   //result after shifting

总结

在这篇文章中,我们探讨了C++语言所提供的运算符。作为一个初学者,你需要了解每个运算符,何时以及如何使用它。有了这些,你应该能够在你的程序中轻松地执行任何数学和逻辑计算的操作。