admin管理员组

文章数量:1794759

JAVA自带进制间进行相互转换、超长2进制转10进制、进制补零、位运算(2进制

JAVA自带进制间进行相互转换、超长2进制转10进制、进制补零、位运算(2进制

  • 先看结果(文末附代码)
  • 附代码测试
public class Main2 { public static void main(String[] args) { /** * 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); // 十六进制转成十进制 Integer integer = Integer.valueOf("FFFF", 16); // 八进制转成十进制 Integer integer1 = Integer.valueOf("123", 8); // 二进制转十进制 String string3 = Integer.valueOf("0101", 2).toString(); /** * String 转 int */ int i1 = Integer.parseInt("FF", 16); int i2 = Integer.parseInt("1100110", 2); int i3 = Integer.parseInt("Kona", 27); 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) { 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; // 调用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 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()); } }

本文标签: 带进进制转java进制补零进制