目录
一:了解运算符的优先级
运算符优先级记忆的原则为:
1.从整体优先节的角度来说:初级运算符>单目运算符>双目运算符>逗号运算符。
2.所有赋值运算符优先级均为一致,唯有逗号运算符低于赋值运算符。
3.其他双目运算符的优先级。
算术运算符 >移位运算符> 关系运算符> 按位运算符> 逻辑运算符
运算符的结合性规律就是顺序,除了单目运算符,三目运算符,赋值运算符三种是从右往左以外,剩下的都是从左往右。
二:部分运算符介绍
(1)初级运算符包括:
() 圆括号;[ ]下标运算符;. 结构体或类的成员运算符;->指向结构体或者类的成员运算符
(2)关系运算符包括:
设X=1,Y=2,则
==: 检验两数是否相等,相等为真,即(X == Y)为假
!=: 检验两数是否相等,不相等为真,即(X != Y)为真
>,<,>=,<=与数学上的原则一致
(3)逻辑运算符
设X=1,Y=0,则
&&:如果两个数据都为非0,则为真,即(X&&Y)为假
|| :如果有一个数据都为非0,则为真,即(X||Y)为真
!:逆转逻辑状态,假假为真,即 !(X&&Y)为真
(4)赋值运算符
(5)算术运算符
即:+ - * / % ++ --
+ - * /与数学上的表达式与方法一致
%:即表示整除后余数,实例:5 % 2 = 1,5 / 2的结果为商2余1,实例代码如下:
#include<stdio.h>
int main()
{
int n = 5;
int y = 2;
printf("5 / 2 = %d\n",n/y);/*(int类型取整,则:5/2=2.5,取整数部分2)如要打印5/2=2.5可写
printf("5 / 2 = %f\n",float(n) /float( y));*/
printf("5 % 2 = %d\n",n%y);
return 0;
}
输出结果为:
++:x++相当于x+1
--:x--相当于x-1
(6)位运算符(&,|,^,~,>> ,<<)
位运算符:是对二进制位数进行的一种逻辑运算,它包括“与”“非”“或”“异或”"右移"
"左移"六种
①与(&)
与(&):操作数中的两位中位数都为1,那么结果才为1,反之为0,可看作求相同的部分
如:5&10{5的二进制为101,10的二进制为1010,二者相同部分为0000,输出0};
5&13{13的二进制为1101,二者相同部分为101,则输出5};代码实例如下图:
②或(|)
或(|):操作数中的两数二进制只要有一位为1,那么二进制对应位数结果就为1,反之为0。
如:5&10{5的二进制为101,10的二进制为1010,则根据“有一则一”得到1111,输出15};
5&13{13的二进制为1101,则根据“有一则一”得到1101,输出13}代码实例如下图:
③异或(^)
异或(^):操作数中的两数二进制对应位数相同为0,反之为1。
如:5&10{5的二进制为101,10的二进制为1010,则根据“同0异1”得到1111,输出15};
5&13{13的二进制为1101,则根据““同0异1”得到 1000,输出8}代码实例如下图:
④按位取反(~)
按位取反(~):一位数的二进制中,将二进制中所有的位数取反
如:5的二进制源码是0000000000000000000000000000000101按位取反得到111111111111111111111111111111010,则为一个负数,因为int操作的是补码,则有反码为:1000000000000000000000000000000101,由补码等于反码+1得到,1000000000000000000000000000000110则输出-6;(大致可以记作正数按位取反则改变符号,数字加一,表示为~(c)=-(c+1) [c>0])
-5的二进制源码为1000000000000000000000000000000101,对-5的补码:111111111111111111111111111111011按位取反得到0000000000000000000000000000000100,则为一个正数,整数原反补码三码相同,则输出:4;(大致可以记作负数按位取反则改变符号,数字减一,表示为~(-c)=-(c-1) [c>0])
代码实例如下图:
源码,反码,补码的相关内容具体可查看计算机原理
⑤>>右移 <<左移
移位运算符:把位按指定的值向左或向右移动
<< 向左移动 而 >> 向右移动,超过的位将丢失,而空出的位则补0
如:5的二进制码为101,则2<<1则为1010,输出10,2>>1则为010,输出2
代码实例为:
负数的右移,就是补码高位补1,然后按位取反加1即可; 负数的左移,就是补码低位补0,然后按位取反加1即可;
如求-5>>2:
-5的补码为111111111111111111111111111111011向右移动两位高位补1有111111111111111111111111111111110,按位取反加一得到:10000000000000000000000000001加一得到10000000000000000000000000010即输出-2;
求-5<<2:
-5的补码为111111111111111111111111111111011向左移动两位低位补0有
111111111111111111111111111101100,按位取反加一得到:10000000000000000000000010011
加一得到10000000000000000000000010100即输出-20
代码实例为:
码字不易,点个赞吧。