运算符用于执行程序代码运算,会针对一个以上操作数进行运算。主要的运算符分类有:算术运算符,赋值运算符,关系运算符,逻辑运算符和位运算符。
1、逗号运算符(,)※
多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
int a1,a2,b=2,c=7,d=5;
a1=(++b,c—,d+3);
a2=++b,c—,d+3;
代码依次执行下来,对于给a1赋值的代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是(d+3)的值为8。
对于给a2赋值的代码,也是有三个表达式,这时的三个表达式为a2=++b、c—、d+3。因为赋值运算符比逗号运算符优先级高,所以a2值为4。
2、算术运算符(+, - ,, /,%)※
算术运算符,就是用来处理四则运算的符号,这是最简单也最常用的符号,处理数字的时候几乎都会用到它。
它们的运算顺序是先乘除,后加减,如果有括号就先算括号内再算括号外,同一级运算顺序是从左到右。
注意:除法运算符的结果为两个操作数中的最高精度
3、赋值运算符(=,+=,-=,=,/=,%=,>>=,<<= ,&=, |= ,^=)※
(1)简单赋值运算符=※
它的作用是将一个表达式的值赋给一个左值。当左、右操作数的类型不同时,编译器会隐式进行转换,将右操作数转为左操作数。
int a, b, c;
a=3;
b=4;
c = ( a + b )(2a - b)// c结果为14
(2)复合的赋值运算符+=,-=…※
例如:
a+=5 等价于a=a+5
x=y+7 等价于x=x(y+7)
r%=p 等价于r=r%p
4、自增自减操作符(++,—)※
单目运算符,自增运算符 ++ 使操作数的值加1,其操作数必须为可变左值(可简单地理解为变量),自增运算符++ 可以置于操作数前面,也可以放在后面,如下
int num=0;
++num;
num++ ;
++num表示,num自增1后再参与其它运算;
而num++ 则是num参与运算后,num的值再自增1
(1)不参与其它运算情况※
int i=3;
int j=4;
i++;
++j;
i,j结果就是 4,5
(2)参与其它运算情况※
int i=3;
int j=4;
int a = i++;
int b = ++j;
这里就开始体现出++前置与后置的区别了,a,b结果是3,5
5、关系运算符(<,<=,>, >= , ==,!=)※
用来判断两个操作数之间的关系
关系运算符的值只能是真和假
注意:在C++中,将非零值和true都判断为真。将0和false都判断为假。在C#中真和假只能true和false。
6、逻辑运算符(或真且假)※
逻辑或:||
逻辑与:&&
逻辑非:!
逻辑运算的数据和逻辑运算符的运算结果是boolean类型。
7、条件操作符(?:)※
唯一的三目运算符
使用形式:条件表达式?表达式成立的结果 : 表达式不成立的结果
如下是求两个变量中最大值:
int a=10;
int b=20;
int max=(a>b)?a:
8、位运算符※
按位于:&
按位或:|
按位异或:^
按位取反:~
左移:<<
右移:>>
运算符用来对二进制位进行操作,对于位运算符来说,左右操作数均为整数,才有意义。
(1)按位与(&)※
按位与运算&是双目运算符,其功能是参与运算的两数各对应的二进制位进行逻辑与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数补码方式出现。
例如:9&5可写算式如下:
00001001 (9的二进制补码)
& 00000101 (5的二进制补码)
-------------------------
00000001 (1的二进制补码)
(2)按位或(|)※
按位或运算符“|”是双目运算符, 其功能是参与运算的两数各对应的二进制位进行逻辑或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
如:93 | 57
0000 0000 0101 1101
| 0000 0000 0011 1001
-----------------------
0000 0000 0111 1101
(3)按位异或(^)※
只有在两个比较的位不同时其结果是1,否则结果为0,即“相同为0,不同为1”。
如:93 | 57
0000 0000 0101 1101
^ 0000 0000 0011 1001
----------------------
0000 0000 0110 0100
实现两个数的交换:int a = 8;
int b = 12;
a=a^b;
b=b^a;
a=a^b;
(4)按位取反 (~)※
二进制每一位取反,0变1,1变0
如:
int a=93;
~a;
0000 0000 0101 1101 —->1111 1111 1010 0010
(5)左移(<< )※
双目运算符,第一运算对象是移位对象,第二个运算对象是所移的二进制位数。
移位运算符是将数据看成二进制数,对其进行向左移动若干位的运算。左移一位相当于该数乘以2,左移N位相当于该数乘以2的N次方。
移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移有关。如果是左移,则规定补入的数全部是0;如果是右移,还与被移位的数据是否带符号有关。若是不带符号数,则补入的数全部为0;若是带符号数,则补入的数全部等于原数的最左端位上的原数(即原符号位)。
移位时
1:移出的位数全部丢弃
2:移出的空位补0
93 << 3
0000 0000 0101 1101=>0000 0010 1110 1000
(6)右移操作符(>> )
※
双目运算符,第一运算对象是移位对象,第二个运算对象是所移的二进制位数。
移位运算符是将数据看成二进制数,对其进行向右移动若干位的运算。右移一位相当于除以2,右移N位相当于除以2的N次方。
移位时
1:移出的位数全部丢弃
2:移出的空位如果是整数补0,负数补1
93 >> 3
0000 0000 0101 1101=> 0000 0000 0000 1011