如何将二进制字符串转换为 Java 中的十进制字符串
How to convert a binary String to a decimal string in Java
我正在做作业,以为我已经完成了,但老师告诉我这不是他要找的东西,所以我需要知道如何将存储为字符串的二进制数转换为不使用除 length()、charAt()、幂函数和 Java.
中的 floor/ceiling 之外的任何内置函数的十进制字符串
我一开始就是这样的。
import java.util.Scanner;
public class inclass2Fall15Second {
public static void convertBinaryToDecimalString() {
Scanner myscnr = new Scanner(System.in);
int decimal = 0;
String binary;
System.out.println("Please enter a binary number: ");
binary = myscnr.nextLine();
decimal = Integer.parseInt(binary, 2);
System.out.println("The decimal number that corresponds to " + binary + " is " + decimal);
}
public static void main (String[] args) {
convertBinaryToDecimalString();
}
}
要将以 2 为基数(二进制)的表示形式转换为以 10 为基数(十进制),请将每个位的值乘以 2^(位位置)并将值相加。
例如1011 -> (1 * 2^0) + (1 * 2^1) + (0 * 2^2) + (1 * 2^3) = 1 + 2 + 0 + 8 = 11
由于二进制是从右到左读取的(即 LSB(最低有效位)在最右边,MSB(最高有效位)在最左边),我们以相反的顺序遍历字符串.
要获取位值,请从 char 中减去“0”。这将减去 ascii 值为“0”的字符的 ascii 值,得到该位的整数值。
要计算 2^(位位置),我们可以对位位置进行计数,并在每次迭代时递增计数。然后我们可以做 1 << count 来获得 2 ^ (位位置)的值。或者,您也可以执行 Math.pow(2, count),但前者效率更高,因为它只是一个左移指令。
下面是实现上述内容的代码:
public static int convertBinStrToInt(String binStr) {
int dec = 0, count = 0;
for (int i = binStr.length()-1; i >=0; i--) {
dec += (binStr.charAt(i) - '0') * (1 << count++);
}
return dec;
}
我正在做作业,以为我已经完成了,但老师告诉我这不是他要找的东西,所以我需要知道如何将存储为字符串的二进制数转换为不使用除 length()、charAt()、幂函数和 Java.
中的 floor/ceiling 之外的任何内置函数的十进制字符串我一开始就是这样的。
import java.util.Scanner;
public class inclass2Fall15Second {
public static void convertBinaryToDecimalString() {
Scanner myscnr = new Scanner(System.in);
int decimal = 0;
String binary;
System.out.println("Please enter a binary number: ");
binary = myscnr.nextLine();
decimal = Integer.parseInt(binary, 2);
System.out.println("The decimal number that corresponds to " + binary + " is " + decimal);
}
public static void main (String[] args) {
convertBinaryToDecimalString();
}
}
要将以 2 为基数(二进制)的表示形式转换为以 10 为基数(十进制),请将每个位的值乘以 2^(位位置)并将值相加。
例如1011 -> (1 * 2^0) + (1 * 2^1) + (0 * 2^2) + (1 * 2^3) = 1 + 2 + 0 + 8 = 11
由于二进制是从右到左读取的(即 LSB(最低有效位)在最右边,MSB(最高有效位)在最左边),我们以相反的顺序遍历字符串.
要获取位值,请从 char 中减去“0”。这将减去 ascii 值为“0”的字符的 ascii 值,得到该位的整数值。
要计算 2^(位位置),我们可以对位位置进行计数,并在每次迭代时递增计数。然后我们可以做 1 << count 来获得 2 ^ (位位置)的值。或者,您也可以执行 Math.pow(2, count),但前者效率更高,因为它只是一个左移指令。
下面是实现上述内容的代码:
public static int convertBinStrToInt(String binStr) {
int dec = 0, count = 0;
for (int i = binStr.length()-1; i >=0; i--) {
dec += (binStr.charAt(i) - '0') * (1 << count++);
}
return dec;
}