首先:移位操作符和运算操作符均是可以理解为整数储存在内存的二进制形式
使用该两种操作符会使该数二进制的大小发生改变,也就是数值的改变
而运算操作符往往具有特定的使用技巧
1.移位操作符
<<左移操作符
>>右移操作符
(移位操作符操作的对象只能是整数)
<<左移操作符
移位规则:左边抛弃,右边补0
但事实是如果a没有被赋值,a的值不会被改变
>>右移操作符
警告⚠ :
对于移位运算符,不要移动负数位,这个是标准未定义的。
移位规则:
1.逻辑右移将各个位向最低位方向移动,最高位补0。
2.对于算数右移来说,它是将各个位向最低位方向移动,最高位用数据原本的符号位进行填充。
区别是:
对于无符号数据类型,执行的是逻辑右移
如果定义的是一个有符号的数据类型,执行的是算数右移
一般来说,对于无符号数,左移1位就相当于将这个数扩大两倍,前提是没有发生数据溢出。
相同的,对于无符号数,执行逻辑右移,结果相当于把这个数除以2
位运算操作符
& 按位与
| 按位或
^ 按位异或
~取反
1.& 按位与
功能:只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
2.| 按位或
功能:只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
3.^ 按位异或
功能:双目运算符,当两数的二进制位相异则为1,相同则为0。
4.~ 按位取反
功能:求反运算符~为
单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。
int a=10
~a
00000000 00000000 00000000 00001010// 10的原码和反码
111111111 111111111 111111111 11110101// ~10的反码
若想得出~a的值,则可以先减一再取反