本篇是java整数型二进制位运算的一些操作,算是数据结构最基础的入门篇,大家感兴趣可以根据代码自行测试想要的场景。
1、java的int类型为32位的二进制数
写一段程序,打印int整数类型对应的二进制(这里以最大正数和最小正数为例)
Integer对象中MAX_VALUE为2147483647,Integer对象中MIN_VALUE为-2147483648
这两个数的绝对值是相差1的,因为负数的时候最高位为符号位优有值。
public class PrintB { public static void print(int number){ for(int i=31;i>=0; i--){ //number和1左移(位运算)i位与 结果显示0或1 System.out.print((number & (1<< i) )==0 ? "0":"1"); } System.out.println(); } public static void main(String[] args) { int a =Integer.MAX_VALUE; int b =Integer.MIN_VALUE; System.out.printf("最大整数:"); System.out.println(a); System.out.printf("最小整数:"); System.out.println(b); System.out.printf("最大整数的二进制位:"); print(a); System.out.printf("最小整数的二进制位:"); print(b); } }
2、关于java的整数型位运算
- 取反操作
整数类型取反的运算符为“~”,一个数值的相反数,相当于二进制位运算取反加1
public static void main(String[] args) { int a= Integer.MAX_VALUE; //取值相反数 int b =-a; System.out.println(a); System.out.println(b); //位运算取反加1 int c=~a+1; System.out.println(c); }
- 取反操作特例(最小数取反还是他本身)
public static void main(String[] args) { int a= Integer.MIN_VALUE; //取值相反数 int b =-a; System.out.println(a); System.out.println(b); //位运算取反加1 int c=~a+1; System.out.println(c); }
- 位运算 或、与、异或的操作
public static void main(String[] args) { int a= 12; System.out.printf("a的二进制数: "); print(a); int b= 13; System.out.printf("b的二进制数: "); print(b); //或运算 int c =a|b; System.out.printf("a|b的二进制数:"); print(c); //与运算 int d =a&b; System.out.printf("a&b的二进制数:"); print(d); //异或运算 int f =a^b; System.out.printf("a^b的二进制数:"); print(f); }
- 位移操作">>"和">>>"的区别
>>为带符号位移,>>>为不带符号位移,不带符号位移,高位用0来补,带符号位移的符号位不变
public class PrintB { public static void print(int number){ for(int i=31;i>=0; i--){ //number和1左移(位运算)i位与 结果显示0或1 System.out.print((number & (1<< i) )==0 ? "0":"1"); } System.out.println(); } public static void main(String[] args) { int a = Integer.MIN_VALUE; print(a); //带符号位移,最高位的符号位1不变,然后右移一位 print(a>>1); //不带符号位移,最高位的补0,然后右移一位 print(a>>>1); System.out.println("========================"); int b = Integer.MAX_VALUE; print(b); //带符号位移,最高位的符号位1不变,然后右移一位 print(b>>1); //不带符号位移,最高位的补0,然后右移一位 print(b>>>1); } }
本篇讲解了下java最基本的二进制位运算操作,算是新手的一个启蒙篇,大家可以用上面代码,多测试一些自己觉得有意思的场景 。后面会继续和大家分析基础的数据结构知识。