Чтение онлайн

на главную - закладки

Жанры

Программирование на Java
Шрифт:

20 << 00 = 00000000000000000000000000010100 = 20

20 << 01 = 00000000000000000000000000101000 = 40

20 << 02 = 00000000000000000000000001010000 = 80

20 << 03 = 00000000000000000000000010100000 = 160

20 << 04 = 00000000000000000000000101000000 = 320

...

20 << 25 = 00101000000000000000000000000000 = 671088640

20 << 26 = 01010000000000000000000000000000 = 1342177280

20 << 27 = 10100000000000000000000000000000 = -1610612736

20 << 28 = 01000000000000000000000000000000 = 1073741824

20 << 29 = 10000000000000000000000000000000 = -2147483648

20 << 30 = 00000000000000000000000000000000 = 0

20 << 31 = 00000000000000000000000000000000 = 0

// Сдвиг влево для отрицательного числа -21

– 21 << 00 = 11111111111111111111111111101011 = -21

– 21 << 01 = 11111111111111111111111111010110 = -42

– 21 << 02 = 11111111111111111111111110101100 = -84

– 21 << 03 = 11111111111111111111111101011000 = -168

– 21 << 04 = 11111111111111111111111010110000 = -336

– 21 << 05 = 11111111111111111111110101100000 = -672

...

– 21 << 25 = 11010110000000000000000000000000 = -704643072

– 21 << 26 = 10101100000000000000000000000000 = -1409286144

– 21 << 27 = 01011000000000000000000000000000 = 1476395008

– 21 << 28 = 10110000000000000000000000000000 = -1342177280

– 21 << 29 = 01100000000000000000000000000000 = 1610612736

– 21 << 30 = 11000000000000000000000000000000 = -1073741824

– 21 << 31 = 10000000000000000000000000000000 = -2147483648

Как видно из примера, неожиданности возникают тогда, когда значащие биты начинают занимать первую позицию и влиять на знак результата.

При сдвиге вправо все биты аргумента смещаются на указанное количество позиций, соответственно, вправо. Однако встает вопрос – каким значением заполнять освобождающиеся позиции слева, в том числе и отвечающую за знак. Есть два варианта. Оператор >> использует для заполнения этих позиций значение знакового бита, то есть результат всегда имеет тот же знак, что и начальное значение. Второй оператор >>> заполняет их нулями, то есть результат всегда положительный.

// Сдвиг вправо для положительного числа 20

// Оператор >>

20 >> 00 = 00000000000000000000000000010100 = 20

20 >> 01 = 00000000000000000000000000001010 = 10

20 >> 02 = 00000000000000000000000000000101 = 5

20 >> 03 = 00000000000000000000000000000010 = 2

20 >> 04 = 00000000000000000000000000000001 = 1

20 >> 05 = 00000000000000000000000000000000 = 0

// Оператор >>>

20 >>> 00 = 00000000000000000000000000010100 = 20

20 >>> 01 = 00000000000000000000000000001010 = 10

20 >>> 02 = 00000000000000000000000000000101 = 5

20 >>> 03 = 00000000000000000000000000000010 = 2

20 >>> 04 = 00000000000000000000000000000001 = 1

20 >>> 05 = 00000000000000000000000000000000 = 0

Очевидно, что для положительного аргумента операторы >> и >>> работают совершенно одинаково. Дальнейший сдвиг на большее количество позиций будет также давать нулевой результат.

// Сдвиг вправо для отрицательного числа -21

// Оператор >>

– 21 >> 00 = 11111111111111111111111111101011 = -21

– 21 >> 01 = 11111111111111111111111111110101 = -11

– 21 >> 02 = 11111111111111111111111111111010 = -6

– 21 >> 03 = 11111111111111111111111111111101 = -3

– 21 >> 04 = 11111111111111111111111111111110 = -2

– 21 >> 05 = 11111111111111111111111111111111 = -1

// Оператор >>>

– 21 >>> 00 = 11111111111111111111111111101011 = -21

– 21 >>> 01 = 01111111111111111111111111110101 = 2147483637

– 21 >>> 02 = 00111111111111111111111111111010 = 1073741818

– 21 >>> 03 = 00011111111111111111111111111101 = 536870909

– 21 >>> 04 = 00001111111111111111111111111110 = 268435454

– 21 >>> 05 = 00000111111111111111111111111111 = 134217727

...

– 21 >>> 24 = 00000000000000000000000011111111 = 255

– 21 >>> 25 = 00000000000000000000000001111111 = 127

– 21 >>> 26 = 00000000000000000000000000111111 = 63

– 21 >>> 27 = 00000000000000000000000000011111 = 31

– 21 >>> 28 = 00000000000000000000000000001111 = 15

– 21 >>> 29 = 00000000000000000000000000000111 = 7

– 21 >>> 30 = 00000000000000000000000000000011 = 3

– 21 >>> 31 = 00000000000000000000000000000001 = 1

Как видно из примеров, эти операции аналогичны делению на 2n. Причем, если для положительных аргументов с ростом n результат закономерно стремится к 0, то для отрицательных предельным значением является -1.

Заключение

В этой лекции были рассмотрены основы лексического анализа программ Java. Для их записи применяется универсальная кодировка Unicode, позволяющая использовать любой язык помимо традиционного английского. Еще раз напомним, что использование Unicode возможно и необходимо в следующих конструкциях:

* комментарии;

* идентификаторы ;

* символьные и строковые литералы.

Остальные же ( пробелы, ключевые слова, числовые, булевские и null- литералы, разделители и операторы) легко записываются с применением лишь ASCII -символов. В то же время любой Unicode -символ также можно задать в виде специальной последовательности ASCII -символов.

Поделиться:
Популярные книги

Князь Андер Арес 5

Грехов Тимофей
5. Андер Арес
Фантастика:
историческое фэнтези
фэнтези
героическая фантастика
5.00
рейтинг книги
Князь Андер Арес 5

Наполеон. Попытка № 2

Никонов Александр Петрович
Документальная литература:
биографии и мемуары
8.00
рейтинг книги
Наполеон. Попытка № 2

Мировая кабала. Ограбление по…

Катасонов Валентин Юрьевич
1. Иго иудейское
Документальная литература:
публицистика
8.85
рейтинг книги
Мировая кабала. Ограбление по…

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Было и будет. Дневник 1910 - 1914

Мережковский Дмитрий Сергеевич
Документальная литература:
публицистика
5.00
рейтинг книги
Было и будет. Дневник 1910 - 1914

Кодекс Охотника. Книга XXV

Винокуров Юрий
25. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга XXV

Барон меняет правила

Ренгач Евгений
2. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон меняет правила

Я еще не царь

Дрейк Сириус
25. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я еще не царь

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Забытые боги

Рокотов Алексей
4. Путь князя
Фантастика:
фэнтези
рпг
попаданцы
5.00
рейтинг книги
Забытые боги

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4

Дикие земли

Желязны Роджер Джозеф
Приключения:
вестерны
7.00
рейтинг книги
Дикие земли

Тактик

Земляной Андрей Борисович
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
Тактик

Ваше Сиятельство 6

Моури Эрли
6. Ваше Сиятельство
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 6