目录
6:关系操作符(> 、< 、== 、<= 、>= 、!= )
1.算数操作符
1.1 “ / ”操作符
“ / ”操作符属于双目操作符,用于求商
当两个操作数均为整数且恰好可以除尽时,所得结果符合实际数学运算。
当两个操作符均为整数且余数不为0时,所得结果为0向取整(取更接近于0的整数,即不进行四舍不入,直接舍掉小数)后的结果。
如(-5)/ 2 实际为(-2.5),零项取整发现(-2)更为接近0,结果为(-2),或直接舍掉小数位(0.5),取结果(-2)。
当操作数有负数时,结果不受影响,符合实际正负逻辑(当然还符合零项取整):
注意:
1.分母不能为0
2.整数除法余数不为0:在除的同时,就已经去掉了小数点,即整数运算后结果为已经零向取整后的结果,然后该结果才以浮点型存储到变量中,小数位全为0。
处理办法:将正数除法变为浮点数同整数的运算即可。
1.2 “ % ” 操作符
“ % ” 操作符属于双目操作符,进行取余运算
注意:
“ % ” 只能用于整型操作数,而不能进行浮点数的运算
当其中一个操作数为负数时:
最后运算结果同第一个操作数的正负号相同。
当操作数均为负数时:结果同样取第一个操作数的符号。
2.移位操作符
2.1左移(<<)操作符
左移后,左边最高位抛弃,右边最低位补0。
2.2右移(>>)操作符
右移分为两种,一种是逻辑右移,一种是算数右移
算术移位:左边用该值得符号位填充,右边丢弃
逻辑移位:左边用0填充,右边丢弃
结果为-1,因此我们可以发现该编译器进行右移运算采用的是算术右移,左边补符号位(符号位看自身类型,若为无符号数,补0,;若为有符号数且为负数,补1),右边丢弃。
注意:
a:移位操作数只能移位整型,左右操作数均不可为浮点数。
b:移位运算符不能移动负数位,这种行为是标准未定义的
3. 位运算符
“ 位 ”指的是二进制位。
补充:权重
权重就是指所占的比重,如期末考试在总分上的占比。
如5——0000 0101 这8个bit位中,从右到左权重依次减小,即低位的权重小,高位的权重大。
如低位的1代表 1*(2^0) =1;而高位的1代表的则是 1*(2^2)=4.
3.1 按位与运算符(&)
“ & ”:相对应(权重相同)的二进制位若均为1,则结果为1,其它情况,结果均为0.
3.2 按位或运算符(|)
“ | ”:相对应(权重相同)的二进制位若至少有一个为1,则结果为1,若均为0,则结果为0。
3.3 按位异或运算符(^)
" ^ ":相对应(权重相同)的二进制位相同则结果为0,相异则结果为1.
如下:
注意:
a^a = 0;
0^a = a;
如下:
实例运用:
1.交换两个整型变量(不创建临时变量)
2.判断1的个数
但很显然,上述方法对于有符号负数是不成立的,因为有符号负数右移采用的是算术移位,右边丢弃,左边补符号位,也就是1,如此while循环就会陷入死循环。
优化如下:
3.找两个整数中不同的位数
4.赋值操作符(=)
赋值操作符相信大家都有所了解,不过多赘述。
注意:
1.赋值操作符可以进行连等(链式赋值)
2.注意初始化和赋值的区别
初始化只能进行一次,会开辟空间。赋值能进行多次,只是修改原有空间里的值。
3.区分赋值(=)和等于(==)
5.复合运算符
(+= 、-= 、*= 、/= 、&= 、|= 、%= 、 >>= 、<<= 、^= ... )
6:关系操作符(> 、< 、== 、<= 、>= 、!= )
a:" != " 为不相等的判断
b:注意“==”与“=”区别
7.逻辑操作符
对逻辑结果进行操作的操作符。
7.1逻辑与(&&)操作符
“ && ”,若两个操作数结果均为真,则结果为真。
7.2逻辑或( || )操作符
“||”,若两个操作数结果有一个为真,则结果为真;均为假,则结果为假。
注意:
1.操作符的短路运算
“&&”两个从操作数从左往右进行判断,若左边表达式结果为假,则不再进行右边表达式的判断,直接的出结果为假。
“||”中若左边结果为真,则不再执行右边表达式,得出总结果为真。
2. 注意区分逻辑操作符和按位操作符
按位操作符是对二进制位的操作,而逻辑操作符是对逻辑结果的操作
实例:
1. 逻辑与的短路运算
2.逻辑或的短路运算