package csdn;
public class BitMap {
/**
* java中位运算符
* 重点 通过 补码运算
* 正数 原码 反码 补码 都一样
* 负数 原码 反码在原码除了符号位,其他位取反 补码在反码上加一
* | & ^ `
* >> << 右移 和 左移 右移高位补1
* >>> 无符号右移 高位补0
*/
public static void main(String[] args) {
int n=40;
int n2= (n & 0b1000)/0b1000;
System.out.println("n2= "+n2);
int n3=1<<3;
System.out.println("n3= "+n3);
int n4=(n | (1<<2));
System.out.println("n4= "+n4);
int n5=n>>>4;
System.out.println("n5= "+n5);
//超过数值范围好像都是-1
// -2 0b10 -5 0b101
int n6=-2>>3;
System.out.println("n6= "+n6);
int n7=-5>>2;
// 原码 1000 0000 0000 0000 0000 0000 0000 0101
// 反码 1111 1111 1111 1111 1111 1111 1111 1010
// 补码 1111 1111 1111 1111 1111 1111 1111 1011
//右移2位后的补码 0011 1111 1111 1111 1111 1111 1111 1110
// >> 负数右移后高位补1 1111 1111 1111 1111 1111 1111 1111 1110
// 反码 1111 1111 1111 1111 1111 1111 1111 1101
// 原码 1000 0000 0000 0000 0000 0000 0000 0010
// 正好是-2
System.out.println( "n7="+n7);
//
int n8=5>>2;
System.out.println("n8="+n8);
int n9=-4 | 0b10;
System.out.println("n9="+n9);
int n10=0b10000;
System.out.println("n10="+n10);
// 这是补码
int n11=0b10000000000000000000000000000001;
System.out.println("n11="+n11);
// 我们赋值的就是补码
int n12=0b10000000000000000000000000000010;
System.out.println("n12="+n12);
}
}
java中的位操作
最新推荐文章于 2022-11-20 12:25:50 发布