(1)位操作符(& | ^)
&:(按二进制位“与”)
也就是两个数的每一位二进制数按照 “与” 的算法,如下:
int a = 3 ,b = 5 ;
c = a & b;
我们首先写出a和b的二进制数来具体分析:
a:00000000000000000000000000000011
b:00000000000000000000000000000101
则c就是a和b的每一位二进制按照 与 来计算(有0则0,1&1得1)所以c的二进制如下:
c:00000000000000000000000000000001
所以c的数值是1
| :(按二进制位“或”)
也就是两个数的每一位二进制数按照 “或” 的算法,具体的原理与上述 & 一致,规则为(有1得1)
^ :(按二进制位“异或”)
规则是(相同位0,相异为1)
练习:如不创建第三个变量来实现两个变量的数值交换:
方法一:可以使用 a=a+b ; b=a-b ; a=a-b;
方法二:可以使用 a=a^b ; b=a^b ; a=a^b;
(方法二的具体原理读者可以自己写出二进制数来计算)
(2)赋值操作符:(=,+=,/=,>>=...)
该操作符的原理很简单,只需知道具体如何计算即可
如:a+=5 等价于 a=a+5 其余的同理计算即可:
(3)单目操作符:(!,-,+,&,sizeof,~,--,++,*,(类型))
!:“逻辑反”(优先级比较高) 具体意思是 非 也就是
可以反转一个操作数的真值或假值。换句话说,如果表达式为 true,那么 ! 运算符将返回 false,如果表达式为 false,则返回 true。(其中1代表true,0代表false)
-,+:也就是正负值
sizeof:“计算类型的字节大小”
该操作符切勿认为是一个函数,其作用为计算某一个类型在内存中所占空间的大小,单位为字节。
如:int a ;sizeof a;计算出的大小应该是 4
也可计算数组的长度,如下:
int arr[]={2,4,8};
int b = sizeof(arr)/sizeof(arr[0]) ; 计算出b的大小就是该数组的长度
~ : “二进制按位取反”
也就是某一个数的二进制数每一位都取反(0变为1,1变为0)
--,++ :“自加和自减”
需要注意的是前置和后置的区别
前置++:也就是先使用后自加
后置++:也就是先自加后使用
-- 的情况与之同理
比如 while(a++) 和 while(++a)的区别(还需读者按照上述规则自行探索)
(类型):“强制类型转换”
如:int a = (int)3.14 ; 这里原本定义的类型是int型的,但赋值是浮点型,但是使用(int)就是将3.14强制转换为int型
(4)关系操作符(==,!=,>=,<=)
此类操作符常用于条件语句和循环语句的判断表达式中,比较简单,这里不在赘述
(5)逻辑操作符(&&,||)
&& : 逻辑与 || : 逻辑或 (在计算机中0代表假,1代表真,大于1的数值也是真)
&& (逻辑与):
① 当逻辑与左边为false(假),则不再进行逻辑与右边的判断,结果为false(假)
② 当逻辑与左边为true(真)则进行右边判断,右边为false(假),结果为false(假)
③ 当逻辑与左边为true(真)则进行右边判断,右边也为true(真),则结果为true(真)
|| (逻辑或):(三种)
① 当逻辑或左边为false(假),继续逻辑或右边的判断,如果也为false(假),结果为false(假)
② 当逻辑或左边为false(假),继续逻辑或右边的判断,如果为true(真),结果为true(真)
③ 当逻辑或左边为true(真),则不再进行逻辑或右边的判断,结果为true(真)这里面包含了短路现象:
具体就是在&&左边的表达式为假的时候(也就是计算出数值为0)将不在执行后面的语句,整体的表达式值为0(假);在 || 左边的表达式为真的时候(也就是计算出数值大于0)将不在执行后面的语句,整体的表达式值为1(真)
(6)条件操作符(表达式1 ?表达式2:表达式3)
该操作符是一个三目操作符,具体是 表达式1用来判断,为真的话就取表达式2的值,为假的话就取表达式3的值