在 Java 中的二进制转换程序之后,如何将我的二进制文件格式化为 4 位组?
How would I format my binary in 4 bit groups after my binary conversion program in Java?
import java.util.*;
public class Binary {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int number = input.nextInt();
String binary = Integer.toBinaryString(number);
System.out.println(binary);
}
}
我正在尝试创建一个将整数转换为二进制并每四位分组一次的程序。比如我输入1,想得到0001,结果得到1
原始方法:
import java.util.*;
public class Binary {
public static void main(String[] args) {
try (Scanner input = new Scanner(System.in)) {
int number = input.nextInt();
String binary = Integer.toBinaryString(number);
System.out.println(binary);
int paddingLength = (4 - binary.length() % 4) % 4;
StringBuilder grouped = new StringBuilder();
for (int i = 0; i < paddingLength; i++) {
grouped.append('0');
}
for (int i = 0; i < binary.length(); i++) {
if (i != 0 && (i + paddingLength) % 4 == 0) {
grouped.append('.');
}
grouped.append(binary.charAt(i));
}
System.out.println(grouped);
}
}
}
$ java Binary.java
1
1
0001
$ java Binary.java
16
10000
0001.0000
$
一次取 4 位数字,并打印这些位。
使用递归实现以正确的顺序打印半字节。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
printbin(input.nextInt());
}
static void printbin(int number) {
int lo = number & 15;
int hi = number >>> 4;
if (hi != 0) {
printbin(hi);
System.out.print('.');
}
for (int n=3; n>=0; n--) {
System.out.print((lo >> n) & 1);
}
}
给定 291(即 0x123),输出为
0001.0010.0011
您可以创建自己的 toBinaryString 方法。但首先你必须了解 << 运算符,它基本上将二进制数向左移动你给它的值。
示例:
int n = 1; // 0001
n = ( n<<(4-1) ); // shift the binary number of 1 to the left 3 times
System.out.println(toBinaryString(n)); // = 1000;
现在你可能会问这个有什么用?那么你可以在移位运算符的帮助下创建你自己的 toBinaryString 方法来做你想做的事
但在跳转到代码之前,您必须了解 & 运算符的工作原理:
1000 & 0001 = 0
public static String toBinaryString(int n) {
String binary = ""; //Start with an empty String
// int i in binary = 1000, as long as i > 0, divide by 2
for (int i = (1 << (4 - 1)); i > 0; i /= 2) {
// if binary n & i are NOT 0, add 1 to the String binary, Otherwise add 0
binary += (n & i) != 0 ? "1" : "0";
}
return binary;
}
假设您将 1 作为输入:
toBinaryString(1); // 1 = 0001 二进制
函数开始:
i 从二进制值 1000 开始,等于 int 8
8比0大吗?是的,除以 2
8/2 = 4;
4 在二进制中是 00100,现在让我们将它与我们的输入 0001
进行比较
00100 & 0001 = 0? // 是
将 0 添加到二进制字符串。
现在将 4 除以 2 并重复循环。该函数将在末尾添加 3 个零和 1。那将是你的 0001。
循环二进制文件的末尾将是您想要的字符串形式的值。
希望我帮到了你
~穆斯塔法
让我们将一些 Streams, Collectors and RegEx 投入到我们的解决方案中以完成学习练习。
流/收集器/正则表达式解决方案:
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Collectors;
class Binary
{
public static void main( String[] args )
{
Scanner input = new Scanner( System.in );
int number = input.nextInt();
String binary = Integer.toBinaryString( number );
System.out.println( binary );
// SOLUTION:
int digitsInGroup = 4;
String separator = ".";
while( binary.length() % digitsInGroup > 0 )
binary = "0" + binary;
binary = Arrays.stream( binary.split( String.format( "(?<=\G.{%d})", digitsInGroup ) ) ).collect( Collectors.joining( separator ) );
System.out.println( binary );
}
}
输出:
> java Binary.java
1
1
0001
> java Binary.java
16
10000
0001.0000
> java Binary.java
31000
111100100011000
0111.1001.0001.1000
import java.util.*;
public class Binary {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int number = input.nextInt();
String binary = Integer.toBinaryString(number);
System.out.println(binary);
}
}
我正在尝试创建一个将整数转换为二进制并每四位分组一次的程序。比如我输入1,想得到0001,结果得到1
原始方法:
import java.util.*;
public class Binary {
public static void main(String[] args) {
try (Scanner input = new Scanner(System.in)) {
int number = input.nextInt();
String binary = Integer.toBinaryString(number);
System.out.println(binary);
int paddingLength = (4 - binary.length() % 4) % 4;
StringBuilder grouped = new StringBuilder();
for (int i = 0; i < paddingLength; i++) {
grouped.append('0');
}
for (int i = 0; i < binary.length(); i++) {
if (i != 0 && (i + paddingLength) % 4 == 0) {
grouped.append('.');
}
grouped.append(binary.charAt(i));
}
System.out.println(grouped);
}
}
}
$ java Binary.java
1
1
0001
$ java Binary.java
16
10000
0001.0000
$
一次取 4 位数字,并打印这些位。
使用递归实现以正确的顺序打印半字节。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
printbin(input.nextInt());
}
static void printbin(int number) {
int lo = number & 15;
int hi = number >>> 4;
if (hi != 0) {
printbin(hi);
System.out.print('.');
}
for (int n=3; n>=0; n--) {
System.out.print((lo >> n) & 1);
}
}
给定 291(即 0x123),输出为
0001.0010.0011
您可以创建自己的 toBinaryString 方法。但首先你必须了解 << 运算符,它基本上将二进制数向左移动你给它的值。 示例:
int n = 1; // 0001
n = ( n<<(4-1) ); // shift the binary number of 1 to the left 3 times
System.out.println(toBinaryString(n)); // = 1000;
现在你可能会问这个有什么用?那么你可以在移位运算符的帮助下创建你自己的 toBinaryString 方法来做你想做的事
但在跳转到代码之前,您必须了解 & 运算符的工作原理: 1000 & 0001 = 0
public static String toBinaryString(int n) {
String binary = ""; //Start with an empty String
// int i in binary = 1000, as long as i > 0, divide by 2
for (int i = (1 << (4 - 1)); i > 0; i /= 2) {
// if binary n & i are NOT 0, add 1 to the String binary, Otherwise add 0
binary += (n & i) != 0 ? "1" : "0";
}
return binary;
}
假设您将 1 作为输入:
toBinaryString(1); // 1 = 0001 二进制
函数开始:
i 从二进制值 1000 开始,等于 int 8 8比0大吗?是的,除以 2 8/2 = 4; 4 在二进制中是 00100,现在让我们将它与我们的输入 0001
进行比较00100 & 0001 = 0? // 是
将 0 添加到二进制字符串。
现在将 4 除以 2 并重复循环。该函数将在末尾添加 3 个零和 1。那将是你的 0001。
循环二进制文件的末尾将是您想要的字符串形式的值。
希望我帮到了你
~穆斯塔法
让我们将一些 Streams, Collectors and RegEx 投入到我们的解决方案中以完成学习练习。
流/收集器/正则表达式解决方案:
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Collectors;
class Binary
{
public static void main( String[] args )
{
Scanner input = new Scanner( System.in );
int number = input.nextInt();
String binary = Integer.toBinaryString( number );
System.out.println( binary );
// SOLUTION:
int digitsInGroup = 4;
String separator = ".";
while( binary.length() % digitsInGroup > 0 )
binary = "0" + binary;
binary = Arrays.stream( binary.split( String.format( "(?<=\G.{%d})", digitsInGroup ) ) ).collect( Collectors.joining( separator ) );
System.out.println( binary );
}
}
输出:
> java Binary.java
1
1
0001
> java Binary.java
16
10000
0001.0000
> java Binary.java
31000
111100100011000
0111.1001.0001.1000