整型转换为二进制字符串(无符号右移)
整型转换为二进制字符串,可以使用除2留余法,不过使用无符号右移更加方便。
将整型数字转换为二进制字符串,一共32位,不舍弃前面的0
/**
* 将整型数字转换为二进制字符串,一共32位,不舍弃前面的0
* @param number 整型数字
* @return 二进制字符串
*/
private String get32BitBinString(int number) {
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < 32; i++){
sBuilder.append(number & 1);
number = number >>> 1;
}
return sBuilder.reverse().toString();
}
将整型数字转换为二进制字符串,舍弃前面的0
/**
* 将整型数字转换为二进制字符串,舍弃前面的0
* @param number 整型数字
* @return 二进制字符串
*/
private String getSimpleBinString(int number) {
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < 32; i++){
sBuilder.append(number & 1);
number = number >>> 1;
}
int index = sBuilder.reverse().indexOf("1");
return sBuilder.substring(index);
}
测试:
@Test
public void intToBinary(){
int[] arr = {9, -9, 100, -100};
for (int num : arr){
System.out.println(num);
System.out.println(get32BitBinString(num));
System.out.println(getSimpleBinString(num));
System.out.println("----------------------");
}
}
结果如下:
9
00000000000000000000000000001001
1001
----------------------
-9
11111111111111111111111111110111
11111111111111111111111111110111
----------------------
100
00000000000000000000000001100100
1100100
----------------------
-100
11111111111111111111111110011100
11111111111111111111111110011100
----------------------
Integer中的进制转换方法
这里主要是对比 toBinaryString(num) 和 toString(num, radix)的区别,以及练习Integer.valueOf(str, radix)的使用。
@Test
public void intToBinaryUsingInteger(){
int[] arr = {9, -9, 100, -100};
for (int num : arr){
System.out.println(num);
System.out.println("binary \t\t\t\t" + Integer.toBinaryString(num)); // 进制转换的正规函数
System.out.println("octal \t\t\t\t" + Integer.toOctalString(num)); // 进制转换的正规函数
System.out.println("hex \t\t\t\t" + Integer.toHexString(num)); // 进制转换的正规函数
System.out.println("toString(num, 2) \t" + Integer.toString(num, 2)); // 适合打印输出
System.out.println("-----------------------------------");
}
// 将二进制字符串转换为整数
String str = "000001001";
int val = Integer.valueOf(str, 2);
System.out.println(str + " = " + val);
}
执行结果如下:
9
binary 1001
octal 11
hex 9
toString(num, 2) 1001
-----------------------------------
-9
binary 11111111111111111111111111110111
octal 37777777767
hex fffffff7
toString(num, 2) -1001
-----------------------------------
100
binary 1100100
octal 144
hex 64
toString(num, 2) 1100100
-----------------------------------
-100
binary 11111111111111111111111110011100
octal 37777777634
hex ffffff9c
toString(num, 2) -1100100
-----------------------------------
000001001 = 9