java位运算中主要需注意两点:
1. 十进制怎么转为二进制以及二进制的计算
2. 源码、反码、补码如何得到
3. 十进制加法为逢十进一;二进制为逢二进一
4. 负数在计算机中是以补码的形式表示的
以下为java位运算的例子及解析
public static void main(String[] args) {
/* 2 0010
* 3 0011
* 1 0001
* ^ 亦或运算,同则为0,异则为1
*/
int a = 2^3;
System.out.println("^ -------------" + String.valueOf(a));
/* 2 0010
* 3 0011
* 2 0010
* & 只要一个是0,就为0,即全部为1时才会是1
*/
int b = 2&3;
System.out.println("& -------------" + String.valueOf(b));
/* 2 0000 0010
* 16 0001 0000
* x << y 将x转成二进制后,想左移y位
*
*/
int c = 2 << 3;
System.out.println("<< -------------" + String.valueOf(c));
/* 2 0010
* 1 0001
* x >> y 将x转成二进制后,想右移y位,移到最右边后都为0,例如 2>>2 2>>3 ....都为0
*/
System.out.println(">> -------------" +(String.valueOf(2 >> 1)));
/* 16 0001 0000
* 4 0000 0100
* x >> y 将x转成二进制后,无符号右移,忽略符号位,空位0补齐,移到最右边后都为0
*
* -16 10000000 00010000
* -16反码 11111111 11101111
* -16补码 11111111 11110000
* 所以向右移动两位后为 11111111 11111100
* 结果 1073741820 右移后的结果补全32位后的结果,由于是负数,所有是以1来补全的
* 正数在计算机中是以二进制来保存,负数是以补码的形式表示的
* 反码的计算方式: 源码的符号位不变,其他位取反;
* 补码的计算方式: 反码加一
* 由于正数是以二进制表示,所以空位以0来补充,而负数是以补码形式来表示的,所以空位以1来补充
* 为什么是32位:直接用哪个数字来计算的,默认其类型为int,int类型4个字节,32位
*/
int d = 16 >>> 2;
System.out.println(">>> ------------" +String.valueOf(d));
System.out.println(">>> ------------" +String.valueOf(-16 >>> 2));
}
java位运算符详解
最新推荐文章于 2023-09-18 20:48:59 发布