本篇是java整数型二进制位运算的一些操作,算是数据结构最基础的入门篇,大家感兴趣可以根据代码自行测试想要的场景。
1、java的int类型为32位的二进制数
写一段程序,打印int整数类型对应的二进制(这里以最大正数和最小正数为例)
Integer对象中MAX_VALUE为2147483647,Integer对象中MIN_VALUE为-2147483648
这两个数的绝对值是相差1的,因为负数的时候最高位为符号位优有值。
public class PrintB {
/**
* @Author wangchengzhi
* @Description 各种类型的打印二进制
* @Date 17:03 2022/12/13
* @Param
* @return
**/
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整型类型为32位 下标为0-31
* java中二进制位的最高位表示符号位0正数 1负数
* 正数的时候为1位置 2的n次方加和
* 负数的时候0之后的数据取反加1
* 取反的符号 ~
*/
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 {
/**
* @Author wangchengzhi
* @Description 各种类型的打印二进制
* @Date 17:03 2022/12/13
* @Param
* @return
**/
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最基本的二进制位运算操作,算是新手的一个启蒙篇,大家可以用上面代码,多测试一些自己觉得有意思的场景 。后面会继续和大家分析基础的数据结构知识。