@Last_flower_of_hope

Целочисленные литералы. Как преобразовывать правильно?

Всех приветствую. Учусь самостоятельно программированию, а ума маловато. Извиняюсь за возможно глупый вопрос новичка. Я каждый пример с книги разбираю (Почему именно такой ответ?). И столкнулся с такой проблемой: Целочисленные литералы. Да, я прочитал основу и посмотрел видео ролики (возможно на нужный не попал.) и не один не объяснил по простому, как мы дошли до такого решения. Почему такой ответ? литерал 0х12 . 2Р2 представляет число 72 , 5. Пример который показывает операцию "сдвиг влево" Как узнать какое это число 0xFFFFFFE ?:
/ / Применение сдвига влево в качестве быстрого способа умножения на 2
class MultByTwo {
    public static void main ( String args [ ] ) {
        inti ;
        int num = 0xFFFFFFE ;
        for ( i= 0; i < 4 ; i + + ) {
            num = num << 1 ;
            System.out.println( num ) ;
        }
    }
}

Эта программа выводит следующий результат:
5 3 6 8 7 0 9 0 8
1 0 7 3 7 4 1 8 1 6
2 1 4 7 4 8 3 6 3 2
- 3 2
Ещё раз извините за банальную теорию, но гугл мне не помог.
  • Вопрос задан
  • 424 просмотра
Решения вопроса 1
@hax
junior developer
Первоначально заданное число - 268435454. В шестнадцатеричном формате имеет вид 0xFFFFFFE (можете проверить, открыв калькулятор ). Операция сдвига влево для данного случая аналогична операции умножения на два. Применяется эта операция в цикле 4 раза и после каждого сдвига выводится на экран. Т.е. по сути данная программа выполняет умножение на два четыре раза. Отрицательное число получается из-за выхода максимально допустимого числа Int.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Axe98
Junior Programmer
Не большой спец в теоретической части, но работу побитового сдвига представляю так:
int x = 4;
1)Берётся двоичное представление числа: 0000 0000 0000 0100
2)И оно тупо сдвигается налево/направо на n-позиций
3)Т.к. каждая единица это 2^(позиция),
происходит грубо говоря умножение/деление на 2(n-раз)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы