import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s1 = in.nextLine(); String[] split = s1.split("\\."); StringBuilder sb1 = new StringBuilder(); for (int i = 0; i < split.length; i++) { int num = Integer.parseInt(split[i]); String binaryString = Integer.toBinaryString(num); String bin = String.format("%8s", binaryString).replace(' ', '0'); sb1.append(bin); } System.out.println(Long.parseLong(sb1.toString(), 2)); String s2 = in.nextLine(); String bin = Long.toBinaryString(Long.parseLong(s2)); bin = String.format("%32s", bin).replace(' ', '0'); StringBuilder sb2 = new StringBuilder(); for (int i = 0; i < 4; i++) { String sub = bin.substring(i * 8, i * 8 + 8); long l = Long.parseLong(sub, 2); sb2.append(l); if (i != 3) sb2.append("."); } System.out.println(sb2); } }
String[] split = s1.split("\\.");
在 Java 中,String.split()
方法用于按指定的 正则表达式(Regex) 拆分字符串。由于 .
(点) 在正则表达式中有特殊含义(匹配任意字符),所以必须进行转义才能正确按 .
分割字符串。
String binaryString = Integer.toBinaryString(num); String bin = String.format("%8s", binaryString).replace(' ', '0');
在Java中,Integer.toBinaryString(num)
方法用于将整数转换为二进制字符串表示形式,该方法会返回一个不包含前导零的二进制数字符串。当处理正整数时,如Integer.toBinaryString(5)
会返回"101";
对于负整数,该方法会返回该负数的32位二进制补码形式,例如Integer.toBinaryString(-1)
将输出32个1组成的字符串"11111111111111111111111111111111"。
若需要固定长度的二进制表示,可以结合String.format()
方法实现补零操作,例如使用String.format("%8s", Integer.toBinaryString(num)).replace(' ', '0')
可确保输出8位长度并在左侧补零。此外,该方法仅支持int类型参数,对于long类型数值需使用Long.toBinaryString()
方法。
StringBuilder sb1 = new StringBuilder("1010"); // 二进制 1010 long decimalValue = Long.parseLong(sb1.toString(), 2); System.out.println(decimalValue); // 输出:10(即二进制的 1010 = 十进制的 10)
Long.parseLong(sb1.toString(), 2)
是 Java 中用于将二进制字符串转换为 long
类型十进制数值的方法。这里 sb1
应该是一个包含二进制数字(即仅包含 '0'
和 '1'
)的 StringBuilder
对象。