C++操作者介绍
操作符是帮助我们进行特定数学和逻辑操作数计算的符号。C++语言内置了几种类型的运算符。本文将介绍常用的运算符。
前提条件
要学习这篇文章,你需要具备以下条件。
-
对C++语言有一个基本的了解。
-
用于运行代码的[Codeblocks IDE]。
操作符和操作数的定义
操作符是一个符号,它告诉编译器它应该执行某种数学或逻辑操作。它们在[程序]中被用来[修改数据和变量]。
另一方面,操作数是任何数值、变量和常数,程序对其进行操作。
例如,考虑下面的语句。
a = x+y;
这里,+
是加法运算符,x
和y
是操作数。
加法运算符指示编译器将x
和y
两个操作数相加。
赋值运算符
它们用于为一个变量赋值。在赋值运算符的左边,操作数是一个变量,而在右边,操作数是一个值。
被分配给变量的值必须与该变量的数据类型相同,否则编译器会产生错误。
赋值运算符的类型。
-
=
- 它用于将赋值运算符右边的值赋给变量。 -
+=
- 它是运算符 和 的组合。首先,将变量的值加到右边的值上,然后将结果赋给变量。+
=
-
-=
- 它是运算符 和 的组合。首先,它从右边的变量值中减去该值,然后将结果应用于该变量。-
=
-
*=
- 它是运算符 和 的组合。首先,变量的值乘以右边的值,然后将结果应用于变量。*
=
-
/=
- 它是运算符 和 的组合。首先,变量的值被右手边的值除以,然后将结果分配给变量。/
=
-
%=
- 它是运算符 和 的组合。首先,找到变量当前值的余数除以右手的值,然后将结果分配给变量。%
=
用程序说明赋值运算符的工作。
#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,因为其中一个操作数是真的。逻辑!
运算符评估为假,因为操作数是假的。
位操作符
位操作符用于对单个位进行操作。它们与int
和char
数据类型一起使用。这些操作需要对各个位进行检查、设置或移动。由于位级的算术运算是由计算机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
在上面的程序中,我们比较了两个整数60
和13
的各个位。正如我们之前所说,位操作符对各个位进行操作。我们的整数60
和13
的二进制格式是0011 1100
和0000 1101
。该程序从比较后形成的二进制数字返回一个新的整数。例如在&
算子中我们有。
60 = 0011 1100
&
13 = 0000 1101
________________
12 = 0000 1100 //result after comparison
这里,当我们执行&
操作时,它首先比较整数60
和13
的每个单独的位。如果这两个整数的各个位都有1,程序将返回1。如果它们都没有1
,将返回0
。
之后,由比较形成的二进制数字将转换为整数。因此,0000 1100
是与12
的比较结果。
在程序执行时,位数OR|
操作符会执行以下操作。
60 = 0011 1100
|
13 = 0000 1101
________________
61 = 0011 1101 //result after comparison
这里,当我们执行|
操作时,它首先比较整数60
和13
的每个独立位。如果这两个整数中的任何一个位有1,程序就会返回1。
如果它们都没有1
,将返回一个0
。之后,由比较形成的二进制数字将转换为整数。因此,0011 1101
是比较的结果61
。
在程序执行时,位数XOR^
运算器会执行以下操作。
60 = 0011 1100
^
13 = 0000 1101
_______________
49 = 0011 0001 //result after comparison
这里,当我们执行^
操作时,它首先比较整数60
和13
的每个独立位。如果这两个位是不同的,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++语言所提供的运算符。作为一个初学者,你需要了解每个运算符,何时以及如何使用它。有了这些,你应该能够在你的程序中轻松地执行任何数学和逻辑计算的操作。