Вязовик Н.А.
Шрифт:
– 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 очень помогает в написании качественных программ.
Все типы данных разделяются на две группы. Первую составляют 8 простых, или примитивных (от английского primitive), типов данных. Они подразделяются на три подгруппы:
* целочисленные
– byte
– short
– int
– long
– char (также является целочисленным типом)
* дробные
– float
– double
* булевые
– boolean
Вторую группу составляют объектные, или ссылочные (от английского reference), типы данных. Это все классы, интерфейсы и массивы. В стандартных библиотеках первых версий Java находилось несколько сот классов и интерфейсов, сейчас их уже тысячи. Кроме стандартных, написаны многие и многие классы и интерфейсы, составляющие любую Java-программу.
Иллюстрировать логику работы с типами данных проще всего на примере переменных.
Переменные
Переменные используются в программе для хранения данных. Любая переменная имеет три базовых характеристики:
* имя;
* тип;
* значение.
Имя уникально идентифицирует переменную и позволяет обращаться к ней в программе. Тип описывает, какие величины может хранить переменная. Значение – текущая величина, хранящаяся в переменной на данный момент.