для назначения я должен написать программу, которая будет принимать 8-символьную строку (шестнадцатеричное), а затем преобразовывать ее в основание 10. Мне не разрешено использовать какие-либо внешние классы для этого. Я почти уверен, что он работает правильно ... только для положительных чисел. Моя проблема в том, как показать отрицательные числа.
Например, FFFFFFFA должен печатать как -6
Это мой код до сих пор
package hexconverter;
import java.util.*;
/**
*
* @author Steven
*/
public class Main {
Scanner scanner = new Scanner(System.in);
public void doWork() {
System.err.println("Please enter the internal representation: ");
String hex;
hex = scanner.next();
hex = hex.toUpperCase();
long count = 1;
long ans = 0;
for (int i = 7; i >= 0; i--) {
Character c = hex.charAt(i);
if (c != '1' && c != '2' && c != '3' && c != '4' && c != '5' && c != '6' && c != '7' && c != '8' && c != '9') {
int num = fixLetters(c);
ans = ans + (num * count);
count = count * 16;
} else {
String s = c.toString(c);
long num = Integer.parseInt(s);
ans = ans + (num * count);
count = count * 16;
}
}
if (ans > 2147483647) {
System.out.println("is negative");
} else {
System.out.println(ans);
}
}
public int fixLetters(Character c) {
if (c.equals('A')) {
return 10;
} else if (c.equals('B')) {
return 11;
} else if (c.equals('C')) {
return 12;
} else if (c.equals('D')) {
return 13;
} else if (c.equals('E')) {
return 14;
} else if (c.equals('F')) {
return 15;
} else {
return 0;
}
}
public static void main(String[] args) {
// TODO code application logic here
Main a = new Main();
a.doWork();
}
}
Я думаю, что мой тест на отрицательное целое число является правильным ..., поскольку это самое высокое значение, которое может содержать 32 бита, все, что превышает переполнение, будет означать, что оно должно быть отрицательным.
Отсюда я понятия не имею, как это сделать. Любые указатели или советы будут с благодарностью. Если нет способа сделать это математически, я чувствую, что мне придется преобразовать гекс в двоичный файл, а затем выполнить с ним два дополнения, но, опять же, я не знаю, с чего начать.
Заранее спасибо