2013-07-30 2 views
0

В настоящее время написать программу для преобразования шестнадцатеричных в десятичные. Ниже мой код:Преобразование шестнадцатеричного в десятичное получить неверный результат

public class HexTest { 
    public static void main (String [] args) { 
     int z = 0xDeadCafe; 
     System.out.println("z = " + z); 
     } 
    } 

Когда я запускаю свою программу, она показывает мне: z = -559035650

Однако, когда я проверить 0xDeadCafe с помощью Hex в десятичные конвертер это дает мне другой результат, который 3735931646. Могу ли я узнать, что-то не так с моим кодом и заставить меня получить неправильный результат?

ответ

1

Там нет ничего плохого здесь - int является подписан типа, а также верхний бит вашего значения является 1 (потому что D больше 7), вы в конечном итоге с отрицательным числом.

Самый простой способ, чтобы увидеть значение без знака будет использовать long вместо:

long z = 0xdeadcafeL; 

Обратите внимание на L здесь, чтобы сделать его длинный буквальный - в противном случае он рассматривается как int буквальным и затем конвертированы до long - оставив его как отрицательное число снова.

В качестве альтернативы можно использовать целое число буквальным, но маскировать его с 0xFFFFFFFFL, чтобы превратить его в длинный, не делая его отрицательным:

int z = 0xdeadcafe; 
long x = z & 0xFFFFFFFFL; 
+0

Я понимаю, что вы имеете в виду, сейчас я уже изменить ИНТ долго, но он все равно дает мне подписанное значение. Могу ли я узнать, как получить значение без знака? – Ian

+1

@Ian: Я показал две разные версии: либо используйте длинный литерал для начала, либо замаскируйте его длинным 32-битным набором. –

+0

Спасибо. Оно работает. – Ian