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

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

Жанры

Программирование на Java

Вязовик Н.А.

Шрифт:

– 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 -символов.

Во время анализа компилятор выделяет из текста программы < пробелы > (были рассмотрены все символы, которые рассматриваются как пробелы ) и комментарии, которые полностью удаляются из кода (были рассмотрены все виды комментариев, в частности комментарий разработчика). Пробелы и все виды комментариев служат для разбиения текста программы на лексемы. Были рассмотрены все виды лексем, в том числе все виды литералов.

В дополнении были рассмотрены особенности применения различных операторов.

4. Лекция: Типы данных

Типы данных определяют основные возможности любого языка. Кроме того, Java является строго типизированным языком, а потому четкое понимание модели типов данных очень помогает в написании качественных программ. Лекция начинается с введения понятия переменной, на примере которой иллюстрируются особенности применения типов в Java. Описывается разделение всех типов на простейшие и ссылочные, операции над значениями различных типов, а также особый класс Class, который играет роль метакласса в Java.

Введение

Java является строго типизированным языком. Это означает, что любая переменная и любое выражение имеют известный тип еще на момент компиляции. Такое строгое правило позволяет выявлять многие ошибки уже во время компиляции. Компилятор, найдя ошибку, указывает точное место (строку) и причину ее возникновения, а динамические "баги" (от английского bugs) необходимо сначала выявить с помощью тестирования (что может потребовать значительных усилий), а затем найти место в коде, которое их породило. Поэтому четкое понимание модели типов данных в Java очень помогает в написании качественных программ.

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

Дьявольская секта (Сборник)

Саган Франсуаза
Бестселлер
Детективы:
криминальные детективы
боевики
5.00
рейтинг книги
Дьявольская секта (Сборник)

Мать Ученья

Курмаич Домагой
Фантастика:
фэнтези
мистика
5.00
рейтинг книги
Мать Ученья

Свобода – точка отсчета. О жизни, искусстве и о себе

Вайль Петр
Документальная литература:
публицистика
6.25
рейтинг книги
Свобода – точка отсчета. О жизни, искусстве и о себе

Америка глазами эмигранта. Том 2

Мандалян Элеонора Александровна
Приключения:
прочие приключения
путешествия и география
5.00
рейтинг книги
Америка глазами эмигранта. Том 2

Обманщик

Форсайт Фредерик
Детективы:
политические детективы
7.29
рейтинг книги
Обманщик

Матросы

Первенцев Аркадий Алексеевич
Проза:
советская классическая проза
5.00
рейтинг книги
Матросы

Гримуар темного лорда VIII

Грехов Тимофей
8. Гримуар темного лорда
Фантастика:
боевая фантастика
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
5.25
рейтинг книги
Гримуар темного лорда VIII

Сиротка

Дюпюи Мари-Бернадетт
1. Сиротка
Проза:
историческая проза
8.76
рейтинг книги
Сиротка

Стая

Сергеева Оксана Николаевна
1. Стая
Любовные романы:
современные любовные романы
остросюжетные любовные романы
9.37
рейтинг книги
Стая

Пленник короны

Бушков Александр Александрович
9. Сварог
Фантастика:
героическая фантастика
8.71
рейтинг книги
Пленник короны

Черное сердце

ван Ластбадер Эрик
Детективы:
триллеры
7.00
рейтинг книги
Черное сердце

Энциклопедия Амосова. Алгоритм здоровья

Амосов Николай Михайлович
Научно-образовательная:
медицина
7.86
рейтинг книги
Энциклопедия Амосова. Алгоритм здоровья

Дневник. Первые потрясения

Шеллина Олеся
Драматургия:
драма
7.00
рейтинг книги
Дневник. Первые потрясения

Молодость с нами

Кочетов Всеволод Анисимович
Проза:
русская классическая проза
роман
6.25
рейтинг книги
Молодость с нами