java学习笔记:移位

来源:互联网 发布:企业版域名注册通 编辑:程序博客网 时间:2024/05/24 06:17

java学习笔记:移位



左移n位:<<n,乘以2的n次幂,后边补0
右移n位:>>n,除以2的n次幂,空出来的位按原有最高位补值
无符号右移:>>>n,空出来的位用0补
异或两次为原值,可用于数据加密解密。

练习题:
1. 不用第三方变量,对两个整数变量的值进行互换。
答:方法1:
int n = 3;
int m = 8;
n = n + m;
m = n - m; // <==> m = (n + m) - m = n + (m - m) = n
n = n - m; // <==> n = n - (n - m) = (n - n) + m = m
缺点:如果n和m的值非常大,容易超出int类型的取值范围(2的32次方减1)


方法2:异或(异或两次为原值)
n = n ^ m;
m = n ^ m; // <==> m = n ^ m = (n ^ m) ^ m = n ^ (m ^ m) = n
n = n ^ m; // <==> n = n ^ m = n ^ (n ^ m) =  (n ^ n) ^ m = m