以下所有运算符都是基于二进制的。
移位运算符左移位运算符移位规则将整数的二进制补码向左移动。左边弃,右边填0;
例如,使用:
int a=5;
int b=a 1;10的二进制补数是00000000000000000000000将10的二进制补码左移一位,右端没有零。0的左端被丢弃,因为它超过了32位。
在第二行中,因为整个二进制序列左移一位,所以b的值变为10:
难点和小知识点1。那么,为什么A的值没有变呢?看这个语句,很明显可以得到答案:shift运算符不是赋值运算符,它不能给变量赋值。变量本身的值在没有赋值的情况下是不变的。使用移位运算符类似于使用算术运算符。
int x=y ^ 2;2.左移运算符具有乘以2的效果,例如代码:
int a=5;
int b=a 1;//也就是b=a * 2^1
int x=12
int y=x ^ 3;//即y=x * 2 3右移运算符移位规则右移运算有两种:
逻辑移位的左边用0填充,丢弃算术移位的右边用原值的符号位填充,丢弃的右边用算术右移,比如:
int num=-1 1;-1的补码是:
向右逻辑移位,例如:
int num=-1 1;-1的补码是:
位运算符逐位和两个形补码,对应的二进制位都是1,那么1,如果对应的二进制位数不一样,那么bit 0。比如:
根据2位的补码,对应的二进制位有一位是1,就是1。如果所有对应的二进制数都是0,就是0。比如:
根据按位异或两个形补码,相同时对应的二进制位为0,不同时为1,如:
总结一下按位异或的小规则:
int a=5;
1 . ^ a=0;
2.0 ^ a=a;建议根据XOR的规则验证小规则,以熟悉XOR运算符。