运算符

运算符用于执行程序代码运算,会针对一个以上操作数进行运算。主要的运算符分类有:算术运算符,赋值运算符,关系运算符,逻辑运算符和位运算符。

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

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录