Java位运算
Posted gavinyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java位运算相关的知识,希望对你有一定的参考价值。
/* 6的二进制:110 11的二进制:1011 */ // 与运算符: 相同位上都为1 则该位为1,否则0 System.out.println(6 & 11);//等价于 0110 & 1011 = 0010 ; 0010 转二进制等于2 // 或运算符: 相同位上有一个位1则该位为1,否则0 System.out.println(6 | 11);//等价于 0110 | 1011 = 1111 ; 1111 转二进制等于15 // 异或运算符:相同位上不同则该位为1, 否则0 System.out.println(6 ^ 11);//等价于 0110 | 1011 = 1101 ; 1111 转二进制等于13 // 取反运算符: 位上是0则取1,是1则取0(按位取反的快捷运算公式 -(x+1)) //6=00000000 00000000 00000000 00000110 //取反后为 11111111 11111111 11111111 11111001 //然后将二进制转为十进制数 -7 System.out.println(~6); // 左移运算符:就是把当前这个数的二进制数向左移动多少位(补零) //6=00000000 00000000 00000000 00000110=00000000 00000000 00000000 00110000 System.out.println(6 << 3); // 算术右移运算符:就是把当前这个数的二进制数向右移动多少位(正数左边补0,负数左边补1) //-11 转正数二进制 00000000 00000000 00000000 000001011 //取反 11111111 11111111 11111111 11110100 右移3位 11111111 11111111 11111111 11111110 // 然后负数二进制换算十进制 System.out.println(-11 >> 3); // 逻辑右移运算符:就是把当前这个数的二进制数向右移动多少位(正数负数均左边补0),对于正数和算术右移没区别 //-11 转正数二进制 00000000 00000000 00000000 000001011 //取反 11111111 11111111 11111111 11110100 右移3位,在最高位补3个0 00011111 11111111 11111111 11111110 System.out.println(-11 >>> 3);
以上是关于Java位运算的主要内容,如果未能解决你的问题,请参考以下文章
Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)