Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Побитовое отрицание (NOT)


Автор: underW 2.4.2010, 12:58
Код

    static void start(int go)
    {
        System.out.println("Число в десятичной системе: "+go);
       System.out.println("Число в двоичной системе: "+Integer.toBinaryString(go));
        System.out.println("NOT числа в десятичной системе: "+(~go));
        System.out.println("NOT числа в двоичной системе: "+Integer.toBinaryString(~go));
    }


     public static void main(String[] args)
     {
    start(5);
       }


вот такой кусочек кода возвращает следующие данные:

Код

Число в десятичной системе: 5
Число в двоичной системе: 101
NOT числа в десятичной системе: -6
NOT числа в двоичной системе: 11111111111111111111111111111010


И вот для меня абсолютно не понятно, откуда взялось значение  -6. 

Объясните, кто знает, пожалуйста.

Автор: jk1 2.4.2010, 13:16
Я полагаю с двоичной инверсией все ясно, 0 заменяются на 1 и наоборот.

Теперь о том, почему результат трактуется как -6. Полученное вами двоичное представление 11111111111111111111111111111010 является дополнительным кодом, используемым для представления отрицательных чисел.

http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)