
1_Lekz_02-1_JAVA2_Прим_типы_операции_2013.ppt
- Количество слайдов: 40
Мультимедийный курс Программирование на Java Часть1 Лекция 2. 1 1. Примитивные (простые) типы данных 2. Операции, комментарии 3. Управляющие конструкции
Примитивные типы данных Тип Значение Размер Константы boolean true или false 1 бит true, false char символ Unicode 2 байта ‘X’, u 00 ff, 88, byte целое со знаком 1 байт 50 (определяется как int, но присваивании не дает ошибки) short целое со знаком 2 байта 50 (- " -) int целое со знаком 4 байта 50 long целое со знаком 8 байтов 50 L, 50 l float число с п. т. в 4 байта формате IEEE 754 double 6. 015 Е 21, число с п. т. в 8 байтов 3445 е -05 f. D, 5780 d формате IEEE 754 50 F, 50 f, 0. 443 f, 6. 015 Е 21 F, 3445 е -05 f Размер каждого типа определен в самом языке и не зависит от2 реализации
Примитивные типы данных Логические значения • boolean не являются целыми и не могут быть преобразованы в числовой тип или из него • Величины типа boolean принимают значения true или false • Объявление булевских переменных: boolean a; boolean b; 3
Примитивные типы данных Встроенные примитивные целые типы byte, short, int, long и символьный тип char, в некотором смысле также являющийся целочисленным. При этом только тип char беззнаковый, все остальные – знаковые 4
Примитивные типы данных Символьный тип (char) ØТип char в Java, как и в C/C++, является числовым, хотя и предназначен для хранения отдельных символов ØПеременной символьного типа можно присваивать один символ, заключенный в одинарные кавычки, либо кодирующую символ управляющую последовательность Unicode Кодировка символов Символы в Java являются 16 -разрядными символами Unicode. Первые 256 символов Unicode совместимы с кодировкой ISO 8859 -1. 5
Примитивные типы данных Escape-последовательности uxxxx – 16 -ричный код символа Unicode (xxxx); В стиле С: ddd - 8 -ричный код символа (ddd) ” - двойная кавычка ’ - одинарная кавычка \ - обратный слэш t - символ табуляции n - перевод строки 6
Примитивные типы данных Escape-последовательности (продолжение) f – перевод страницы b – возврат на один символ (Backspace) r - возврат каретки Замечание. Escape-последовательности Unicode могут находиться в любом месте программы, а не только в строковых константах: int u 0069; // означает то же, что int i; 7
Примитивные типы данных Escape-последовательности (продолжение) Применение Escape-последовательности для инициализации полей int n = (short) 'uf 000'; Преобразование символов в числа может давать отрицательные значения (в данном случае значение -4096) 8
Примитивные типы данных Escape-последовательности (продолжение) Применение Escape-последовательности для инициализации полей int n = (short) 'uf 000'; Преобразование символов в числа может давать отрицательные значения (в данном случае значение -4096) 9
Примитивные типы данных Целочисленные типы byte – однобайтовое целое число (8 -битное целое со знаком) short – двухбайтовое целое число (16 -битное целое со знаком) int – четырехбайтовое целое число (32 -битное целое со знаком) long – восьмибайтовое целое число (64 -битное целое со знаком) 10
Примитивные типы данных Целочисленные типы ØДля задания в тексте программы численных констант типа long, выходящих за пределы диапазона чисел типа int, после написания числа следует ставить постфикс – букву L Ø Например, 60000000 L. Можно ставить и строчную l, но ее хуже видно, особенно – на распечатках программы (можно перепутать с единицей) ØВ остальных случаях для всех целочисленных типов значение указывается в обычном виде, и оно считается имеющим тип int – но присваивании число типа int автоматически 11 преобразуется в значение типа long
Примитивные типы данных Целочисленные типы Примеры задания переменных в классе. int i, j, k; int j 1; byte i 1=0, i 2=-5; short i 3=-15600; long m 1=1, m 2, m 3=-100; После указанных объявлений переменные i, j, k, j 1, i 1, m 2 имеют значение 0 Использование в выражениях: i=5; j=i*i + 1 m 1=jm 2=255; m 1=m 1 + m 2*2; 12
Примитивные типы данных Вещественные типы Формат - IEEE 754 (другой вариант названия IEC 60559: 1989) float (4 байта): ü знак - 1 бит, мантисса - 23 бита ü порядок - 8 битов (смещен на -127 т. е. нуль означает 2 в 127 -й степени) ü диапазон чисел 3. 4 E-38 ÷ 3. 4 E+38 double (8 байтов): : ü знак - 1 бит, мантисса - 52 бита ü порядок - 11 бит ü диапазон чисел 1. 7 E-308 ÷ 1. 7 E+308 13
Примитивные типы данных Вещественный тип (продолжение) Особые значения, получаемые при выполнении операций: 1) значения бесконечности различаются как по знаку, так и по типу: Float. NEGATIVE_INFINITY, Double. NEGATIVE_INFINITY (- ∞) – Float. POSITIVE_INFINITY, Double. POSITIVE_INFINITY (+ ∞) 2) не число (Na. N – Not a Number) - - значение Na. N может получаться при преобразовании строки в число, взятии логарифма от отрицательного числа, тригонометрической функции от бесконечности и т. п не сравнимо ни с чем, даже с самим собой Float. Na. N и Double. Na. N различаются При делении на ноль целых чисел генерируется исключение Arithmetic. Exception 14
Операции Характеристики операций Приоритет - определяет порядок выполнения операций в выражении, когда нет скобок Ассоциативность – задает порядок выполнения двух рядом стоящих операций с равным приоритетом ( левая или правая выполняется раньше? ) 15
Операции Арифметические операции Приоритет 1 1 1 2 3 Оператор Ассоциативность Название операции ++ -+, *, /, % П пре- и постинкремент П пре- и постдекремент П унарные + и - Л умножение, деление, остаток от деления по модулю (применима и к целым, и к вещественным) +, +=, -=, *=, /=, %= Л сложение, вычитание специальное присваивание со сложением, вычитанием, умножением, делением , модулем 16
Операции Арифметические операции (продолжение) Ø Cпециальные операции присваивания x=10; x=x%3; альтернатива x%=3; реализуется эффективнее 17
Операции Преобразование числовых типов Неявное, если два типа совместимы (все числовые) Ø целевой тип > исходного (расширяющее преобразование) Ø при сохранении литеральной целочисленной константы в поля типа byte, short, long Ø в промежуточных выражениях (расширяющее преобразование), если § § операнды типа byte или short - до int один операнд long и другие целые – до long один операнд типа float, а другие целые - до float один операнд типа double - до double byte c = 50; c=c*2; // ошибка, т. к. результат выражения имеет тип int 18
Операции Преобразование числовых типов Явное приведение - сужающее (<целевой_тип>) <значение> byte c = 50; c= (byte) (c*2); v. При назначении вещественного целому типу дробная часть теряется ! v. При превышении значением диапазона целевого типа оно редуцируется по модулю этого типа до остатка от деления на модуль диапазона! 19
Операции Арифметические операции (продолжение) Ø Различие между постинкриментом и преинкриментом x=15; x++; // значение x - 16 y=++x; // значение y - 16, x - 15 y=x++; // значение y - 15, x – 16 Ø Деление целых int c= 7/2; // дробная часть отбрасывается 20
Операции Поразрядные операции Тип операнда - целый Приоритет 2 7 8 9 4 Оператор ~ & ^ | <<, >>> &=, ^=, |=, <<=, >>>= Ассоциативность Название операции П унарное отрицание Л битовое AND Л битовое XOR Л битовое OR Л сдвиг на указанное количество разрядов влево, вправо с заполнением знак. бита нулем специальное присваивание с соответствующей операцией 21
Операции Поразрядные операции (продолжение) Метод кодирования «Дополнение до двух» Схема кодирования для отриц. чисел 1) инвертирование всех битов 2) + двоичная 1 -42 = 42(00101010) -> 11010101 -> 11010110 Схема декодирования для отриц. чисел 1) 2) 3) 4) инвертирование всех битов преобразование в десятичную форму + 1 изменение знака 11010110 -> 41 -> 42 -> -42 22
Операции Поразрядные операции (продолжение) Пример операции «Правый сдвиг» Ø положительное int a=35; // 00100011 a >>= 2; // 00001000 – число 8 Ø отрицательное int b=-8; // 11111000 b >>= 1; // 11111100 – число -4 При сдвиге вправо освобождающиеся разряды заполняются значением знакового бита ! При сдвиге влево освобождающиеся разряды заполняются 0! 23
Операции отношений Приоритет Оператор 5 <, <=, >, >= числовой (целый, веществ. , симв. ) Л == != простой Л меньше, меньше или равно, больше или равно равенство простой Л неравенство объект Л равенство ссылок объект Л неравенство ссылок 6 6 Тип операнда Ассоциативность Название операции Результат операции – значение типа boolean 24
Операции булевой логики Приоритет Оператор Ассоциативность 9 & Л булево AND 9 | Л булево OR 8 ^ Л булево исключающее ИЛИ (XOR) (по полной схеме) 10 && Л 11 || Л 1 ! П булево AND (по краткой схеме) булево OR (по краткой схеме) булево унарное отрицание &= , |=, ^=, &&= , ||= Название операции специальное присваивание с соответствующей операцией 25
Операции булевой логики (продолжение) Булевы AND и OR по краткой схеме (&&, ||) – не выполняется оценка правого операнда перед вычислением выражения if (d !=0 && n/d >5) … // при d=0 не будет исключения if (c ==1 & k++ < 70) d=100; // операция // инкремента гарантированно выполнится 26
Операции Цепочка присваивания a=b=c=35; Условная операция <имя_поля> = <условие> ? <выраж 1> : <выраж 2>; Если условие истинно, то полю присваивается результат выражения 1, в противном случае – выражения 2. 27
Комментарии Многострочные в стиле языка С: /* Любое количество любых строк. Лишь бы там не было сочетания звездочки и косой черты */ Однострочные в стиле языка С++: // все написанное до конца строки – комментарий Комментарии документатора : /** Многострочный комментарий, * который войдет в * программный документ */ 28
Управляющие конструкции Оператор if / else if (условие) оператор 1 ; [else оператор 2 ; ] Пример: int i; if (i == 0) matr[i]=1; else matr[i]=-1; Условие всегда должно иметь логическое значение, поэтому if (!i) matr[i]=1; // ошибка! 29
Управляющие конструкции Оператор switch (<выражение>) { case <константа 1> : // последовательность операторов 1 [ break; ] case <константа 2> : // последовательность операторов 2. . . [ default: // последовательность операторов ] } Допустимые типы результата выражения: byte, short, int, char 30
Управляющие конструкции Оператор switch (продолжение) При отсутствии оператора break выполнение проходит через каждый последующий case пока не встретится break или конец оператора 31
Управляющие конструкции Операторы цикла whilе и do / while vс предусловием (условие проверяется до выполнения вложенного оператора ) while (условие) оператор; vс постусловием (условие проверяется после выполнения вложенного оператора ) do оператор while (условие); 32
Управляющие конструкции Примеры циклов: float sum = 0, x = 1; // Цикл с предусловием while(x < 100) { sum += 1 / x; x++; } // То же, но с постусловием sum = 0; x = 1; do { sum += 1 / x; x++; while(x < 100) // Идиома бесконечного цикла while (true) { // оператор } 33
Управляющие конструкции Оператор for обычный for ([<иниц. _часть>]; [<условие>] ; [<итерац. _часть >]) оператор ; Управляющая переменная м. б. объявлена внутри заголовка for (с областью действия - for-оператор) for (int i=10; i>0; i--) System. out. println(i); Может быть несколько управляющих переменных цикла: for (int i=1, j=5; i>j; i++, j--) System. out. println("i="+i); System. out. println(“j="+j); 34
Управляющие конструкции Оператор for обычный (продолжение) for (; !done; ) { // отсутствуют части заголовка if (j==5) done=true; j++; } Бесконечный цикл: for ( ; ; ) { … } 35
Управляющие конструкции Оператор for итерационный (типа each) for (<тип> <перем. > : <имя_мас. / имя_кол. >) оператор ; Пример: float m 1[]={23. 2 f, 3, 45}; for (float m : m 1) { System. out. print(m); System. out. print(" "); } 36
Управляющие конструкции Операторы break и continue break – прерывание цикла с переходом на оператор сразу за циклом continue - переход к следующей итерации цикла без завершения текущей Пример: второй десяток слагаемых в сумму не войдет. for (float x = 1; x < 100; x++ ) { if ( 10 < x && x < 21) continue; sum += 1 / x; } 37
Управляющие конструкции Операторы break и continue (продолжение) break <метка> – переход на оператор, следующий сразу за помеченным блоком Пример: досрочный выход из вложенных циклов. for (int i 1 = 0; i 1 < 10; i 1++) { L: for (int i 2 = 0; i 2 < 10; i 2++) { for (int i 3 = 0; i 3 < 10; i 3++) { if (i 3 == 6) break L; } } /* Сюда передается управление после выполнения оператора "break L; " */ } 38
Управляющие конструкции Операторы break и continue (продолжение) continue <метка> – прерывает текущую итерацию цикла и продолжает помеченный цикл (только в циклах); 39
Управляющие конструкции Оператор return Обеспечивает возврат из вызываемого метода в вызывающую программу (java-систему в том числе) Использование допустимо только вместе с оператором if: if (i==2) return; 40