进制学习这一篇就够了( 三 )


int tmp;
int a=10;
int b=20;
tmp=a;
a=b;
b=tmp;
上述代码计算之后 , a和b的值完成交换 , a的值为20 , b的值为10 。
如果用异或运算来交换2个数 , 可以如下方法:
int a=10;
int b=20;
a=a^b;
b=a^b;
a=a^b;
上述运行之后 , a和b依然完成了值的交换 , 但由于是异或位运算 , 所以效率比上面的代码要高 。
证明:
a=10^20
b=a^b=(10^20)^20=10^20^20=10^0=10
a=a^b=10^20^10=10^10^20=0^20=20
2.2左移( << )不需要考虑最高位补位问题 , 因为高位会被直接溢出 。右移有符号右右移(>>)和无符号右移(>>>) , 有符号右移最高位要补符号位 , 无符号右移最高位只需要补零即可 。所以无符号右移负数时 , 会变为正数 。
2.3 右移就是原数除以2的n次方 。左移就是原数乘以2的n次方 。