Java中的位运算有五种形式: 即 与 运算 &,或运算 | ,异或运算 ^ ,左移、右移运算;与运算与或运算都很好理解,异或运算就是在或运算的基础上,除了1^1=0与或运算不同,其他都与或运算相同;今天主要是想记录一下左移与右移运算:
在Java中左移运算,就是就二进制数最高位移除掉,并在末位增加0;例如10的八位二进制0000 1010;10<<1;执行后的结果就是0100,变成了4;常用的代码形式为: n<<=1;表示n左移1位。
Java中右移运算较左移运算稍微复杂点;其右移分为无符号右移>>>和有符号右移>>;个人理解这里的有无符号就指负数和正数,因为十进制的负数转化位二进制,是需要先将负数的绝对值转化为二进制先,然后再将其按位取反,例如-10,它的八位二进制表示就是1111 0101;也就是如果是无符号右移,那么二进制数都是“正数”;所以可以常规的在最高位补0;例如 -10>>>1;执行后的结果就是0111 1010;如果是有符号数右移则是在最高位补1;例如-10>>1;执行后的结果就是:1111 1010。