2015-01-01 2 views
0

Почему этот кодПреобразование из 32 разрядной двоичной строки в целое Java

public static void main(String[] args){ 
    //       | | | | | | | |  
    int N = (int)Long.parseLong("10110011001100111111001111111100", 2); 
    System.out.println(Integer.toBinaryString(N)); 
    N = Integer.parseInt  ("-0110011001100111111001111111100", 2); 
    System.out.println(Integer.toBinaryString(N)); 
    N = Integer.parseInt  ("+0110011001100111111001111111100", 2); 
    System.out.println(Integer.toBinaryString(N)); 
} 

Выходы:

10110011001100111111001111111100 
11001100110011000000110000000100 
110011001100111111001111111100 

Javadocs: "Символы '-' знак может быть определен, чтобы указать отрицательные значения". Почему первые две бинарные строки отличаются?

+11

Ну, вот как работает дополнение до двух – fge

+0

http://en.wikipedia.org/wiki/Signed_number_representations#Two .27s_complement –

+2

Что вы ожидали от этого? –

ответ

0

Вот как работает дополнение двух. Чтобы отрицать число, он инвертирует все биты и добавляет 1 к результату.

Пример: отрицая 11110001 ----------> 00001111

Смежные вопросы