해당 기본 10 숫자로 변환하려는 이진 숫자 (선행 0 없음)를 나타내는 문자열 배열이 있습니다. 치다:
binary 1011 becomes integer 11
binary 1001 becomes integer 9
binary 11 becomes integer 3 etc.
진행하는 가장 좋은 방법은 무엇입니까? 직접 변환 방법을 찾지 않고 java.lang.number. *를 탐색했습니다. Integer.parseInt(b)
문자열에 정수 EQUAL을 산출합니다. 예를 들어 1001은 9 대신 1,001이되고 출력 기준에 대한 매개 변수를 포함하지 않는 것 같습니다. toBinaryString
변환이 잘못된 방향으로 진행됩니다. 다단계 변환이 필요하다고 생각하지만 메서드 나 하위 클래스의 올바른 조합을 찾을 수없는 것 같습니다. 또한 선행 0 또는 그 부족이 문제가 될 정도도 모르겠습니다. 누구든지 나를 가리키는 좋은 방향이 있습니까?
답변
답변
이것은 작동 할 수 있습니다.
public int binaryToInteger(String binary) {
char[] numbers = binary.toCharArray();
int result = 0;
for(int i=numbers.length - 1; i>=0; i--)
if(numbers[i]=='1')
result += Math.pow(2, (numbers.length-i - 1));
return result;
}
답변
int foo = Integer.parseInt("1001", 2);
양수를 처리하는 경우 잘 작동하지만 부호있는 숫자를 처리해야하는 경우 문자열을 부호 확장 한 다음 Int로 변환해야 할 수 있습니다.
public class bit_fun {
public static void main(String[] args) {
int x= (int)Long.parseLong("FFFFFFFF", 16);
System.out.println("x =" +x);
System.out.println(signExtend("1"));
x= (int)Long.parseLong(signExtend("1"), 2);
System.out.println("x =" +x);
System.out.println(signExtend("0"));
x= (int)Long.parseLong(signExtend("0"), 2);
System.out.println("x =" +x);
System.out.println(signExtend("1000"));
x= (int)Long.parseLong(signExtend("1000"), 2);
System.out.println("x =" +x);
System.out.println(signExtend("01000"));
x= (int)Long.parseLong(signExtend("01000"), 2);
System.out.println("x =" +x);
}
private static String signExtend(String str){
//TODO add bounds checking
int n=32-str.length();
char[] sign_ext = new char[n];
Arrays.fill(sign_ext, str.charAt(0));
return new String(sign_ext)+str;
}
}
output:
x =-1
11111111111111111111111111111111
x =-1
00000000000000000000000000000000
x =0
11111111111111111111111111111000
x =-8
00000000000000000000000000001000
x =8
도움이 되었기를 바랍니다.
답변
static int binaryToInt (String binary){
char []cA = binary.toCharArray();
int result = 0;
for (int i = cA.length-1;i>=0;i--){
//111 , length = 3, i = 2, 2^(3-3) + 2^(3-2)
// 0 1
if(cA[i]=='1') result+=Math.pow(2, cA.length-i-1);
}
return result;
}
답변
public Integer binaryToInteger(String binary){
char[] numbers = binary.toCharArray();
Integer result = 0;
int count = 0;
for(int i=numbers.length-1;i>=0;i--){
if(numbers[i]=='1')result+=(int)Math.pow(2, count);
count++;
}
return result;
}
더 지루한 것 같아요! 올바르게 작동하도록 Hassan의 답변을 수정했습니다.
답변
나를 위해 음수를 처리하려고 할 때 NumberFormatException이 발생했습니다. 음수와 양수에 다음을 사용했습니다.
System.out.println(Integer.parseUnsignedInt("11111111111111111111111111110111", 2));
Output : -9
답변
음수로 작동하도록 Java의 Integer.parseInt (text) 버전을 수정했습니다.
public static int parseInt(String binary) {
if (binary.length() < Integer.SIZE) return Integer.parseInt(binary, 2);
int result = 0;
byte[] bytes = binary.getBytes();
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] == 49) {
result = result | (1 << (bytes.length - 1 - i));
}
}
return result;
}