-
先看结果(文末附代码)
-
附代码测试
public class Main2 {
public static void main(String[] args) {
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
// 十进制 转 任意进制 最大 36 进制
String max_36 = Integer.toUnsignedString(1296, 36);
// 任意进制 转 十进制 最大 36 进制
int int_36 = Integer.parseUnsignedInt("zz", 36);
//------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
* int 转 String
*/
int i = 10;
String custom_36 = Integer.toUnsignedString(i, 36);
String custom_32 = Integer.toUnsignedString(i, 32);
String custom_16 = Integer.toUnsignedString(i, 16);
/*
* 封装好的方法
*/
// 十进制 转 十六进制:
String string = Integer.toHexString(i);
// 十进制 转 八进制
String string1 = Integer.toOctalString(i);
// 十进制 转 二进制
String string2 = Integer.toBinaryString(i);
// 十进制 转 36进制
String integer = Integer.toString(1295, 36);
// 十进制 转 八进制
String integer1 = Integer.toUnsignedString(63, 8);
// 二进制 转 十进制
String string0101 = Integer.valueOf("0101", 2).toString();
// 八进制 转 十进制
String string77 = Integer.valueOf("77", 8).toString();
// 36进制 转 十进制
int stringzz = Integer.parseInt("zz", 36);
/**
* String 转 int
*/
// 十进制转成十六进制——十六进制 不可为int
// 十进制转成八进制——八进制 不可为int
// 十进制转成二进制——二进制 不可为int
// 十六进制转成十进制
int i16 = Integer.parseInt("FF", 16);
// 八进制转成十进制
int i8 = Integer.parseUnsignedInt("77", 8);
// 二进制转十进制
Integer i2 = Integer.valueOf("10", 2);
// 自定义进制
// 27进制转十进制
int i3 = Integer.parseInt("Kona", 27);
// 36进制转十进制
int i4 = Integer.parseUnsignedInt("zz", 36);
System.out.println();
}
- 超长2进制转10进制
/**
* 二进制转十进制
*
* @param str
* @return
*/
public static BigDecimal binaryToString(String str) {
BigDecimal bigDecimal = new BigDecimal(0);
char[] chars = str.toCharArray();
for (int i = chars.length; i > 0; i--) {
BigDecimal temp = new BigDecimal(1);
if (chars[i - 1] == '1') {
for (int j = 0; j < str.toCharArray().length - i; j++) {
temp = temp.multiply(new BigDecimal(2));
}
bigDecimal = bigDecimal.add(temp);
}
}
return bigDecimal;
}
- 进制补零
/**
* 左右补0
*
* @param str
* @param strLength
* @return
*/
public static String addZeroForNum(String str, int strLength) {
// 调用jdk方法
return String.format("%"+strLength+"s", Integer.toBinaryString(Integer.parseInt(str))).replace(' ', '0'); // 仅能左侧添加
// return StringUtils.leftPad(Integer.toBinaryString(Integer.parseInt(str)), strLength, '0'); // 左侧添加
// return StringUtils.rightPad(Integer.toBinaryString(Integer.parseInt(str)), strLength, '0');// 右侧添加
}
// 自己实现
public static String addZeroForNum(String str, int strLength) {
int strLen = str.length();
if (strLen < strLength) {
while (strLen < strLength) {
StringBuffer sb = new StringBuffer();
sb.append("0").append(str);// 左补0
// sb.append(str).append("0");//右补0
str = sb.toString();
strLen = str.length();
}
}
return str;
}
- 位运算
- 以题为例
// 法二: 位运算
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while ((str = br.readLine()) != null) {
String[] ip = str.split("\\.");
long num = Long.parseLong(br.readLine());
//转10进制
// 利用按位或运算,|按位或和&按位与计算方式都是转换二进制再计算
// 左边高位的 ip地址 移位后低位的位置一定为零,所以和未移位的 ip地址 进行或运算一定为低位的数字
// 如:2.2 -> 00000010.00000010
// 移位后 0000001000000000|00000010 -> 0000001000000010
System.out.println(Long.parseLong(ip[0]) << 24 | Long.parseLong(ip[1]) << 16 |
Long.parseLong(ip[2]) << 8 | Long.parseLong(ip[3]));
//转ip地址
StringBuilder sb = new StringBuilder();
// 移位后与255做与运算(保证高于此位置的数字和0做与运算),只保留此次位置范围的
// 如:299867972
// 移位后-> 17.4575.1171359.299867972
// 和255与运算后-> 17.223.159.68
sb.append(String.valueOf((num >> 24) & 255)).append(".").append(String.valueOf((num >> 16) & 255)).append(".").append(String.valueOf((num >> 8) & 255)).append(".").append(String.valueOf(num & 255));
System.out.println(sb.toString());
}
}