Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция6 Безопасность 2018.pptx
Скачиваний:
17
Добавлен:
08.12.2019
Размер:
102.56 Кб
Скачать

Автоматическое преобразование типов применяется к значениям (операндам) только тогда, когда выражение вычисляется:

если внутри выражения значение переменной

типа byte преобразуется к типу int,

то за пределами выражения переменная сохраняет

тип byte.

Автоматическое преобразование типа может привести к неожиданному результату.

Пример - проводится арифметическая операция с двумя значениями типа byte:

вначале операнды byte преобразуются к типу int,

затем вычисляется выражение, результат

которого тоже будет иметь тип int.

Результат операции над двумя значениями byte будет иметь тип int.

21

byte b;

int i;

b = 10;

i = b * b;

// В данном случае не требуется явное приведение типа.

b = 10;

b = (byte) (b * b);

//Тип результата нужно привести к типу переменной b.

Приведения типов не требуется, когда результат вычисления выражения b * b присваивается переменной i - переменная b автоматически преобразуется к типу int при вычислении выражения.

Но чтобы присвоить результат вычисления выражения b * b переменной b, необходимо выполнить операцию приведения типа обратно в тип byte!

22

Аналогично с данными типа char: необходимо выполнить приведение типа результата вычисления выражения обратно к типу char –

в выражении переменные ch1 и ch2 преобразуются в тип int:

char ch1 = 'a', ch2 = 'b';

ch1 = (char) (ch1 + ch2);

Без приведения типа результат сложения значений переменных

ch1 и ch2 имеет тип int и не может быть присвоен переменной типа char.

23

Приведение типов применяется не только для преобразования типов при присваивании.

Пример: для получения дробной части значения выражения результат приводится к типу double,

Без операции приведения он имел бы тип int и дробная часть была бы утеряна.

int i;

for(i = 0; i < 5; i++)

{

Console.WriteLine("Целочисленный результат вычисления “

+i+"/3: " + i / 3);

Console.WriteLine("Результат вычисления, выводимый" +

"с дробной частью: {0:#.##}",(double) i / 3);

}

24

Имеет место также преобразование типов в выражениях с унарными операторами (например, унарный минус).

Для унарных операций операнды, у которых диапазон допустимых значений меньше, чем у int

(такие, как byte, sbyte, short и ushort), преобразуются к типу int.

Операнд типа char также преобразуется к типу int.

Если операнду типа uint присваивается отрицательное значение, он преобразуется к типу long.

Форматирование вывода

Для форматирования числовых данных используется перегруженный метод WriteLine(),

одним из параметров которого - информация о формате.

Синтаксис этого метода:

WriteLine("форматирующая строка", arg0, arg1, ... , argN);

!! аргументы разделены запятыми, а не знаками плюс.

Форматирующая строка состоит из

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

спецификаторов формата.

25

Синтаксис спецификаторов формата обычно выглядит так:

{argnum, width: fmt}

argnum указывает номер аргумента

(начиная с 0), который должен быть выведен на экран в данном месте строки.

width определяет минимальную ширину поля, предоставляемого данному аргументу.

fmt специфицирует используемый формат вывода.

Если выводимое число меньше заданной ширины поля, то неиспользованные части поля заполняются пробелами.

Если для вывода числа потребуется большее количество позиций, они будут выделены автоматически.

26

Позиция спецификатора формата в форматирующей строке указывает место, где на экране будут выведены соответствующие данные.

Элементы width и fmt являются не обязательными.

В простейшей форме спецификатор формата указывает выводимый аргумент.

спецификатор {0} указывает на аргумент arg0,

спецификатор {1} указывает на аргумент arg1 и так далее.

Пример:

Console.WriteLine("В феврале {0} или {1} дней",28, 29);

выведет на экран следующую строку:

В феврале 28 или 29 дней

27

Можно задать минимальную ширину поля:

Console.WriteLine("В феврале {0,10} или {1,5} дней", 28, 29);

В основном форматируют значения

с плавающей точкой и значения типа decimal.

Простейший способ спецификации формата - написание шаблона, который будет использован методом WriteLine() при форматировании.

Шаблон создается так:

в спецификаторе формата указывается номер аргумента,

затем после двоеточия при помощи символа # указываются позиции выводимых цифр.

после выполнения оператора

Console.WriteLine("10/3 = {0:#.##}", 10.0/3.0);

программа выведет результат деления 10.0 на 3.0,

10/3 = 3.33

Если программой выводится число, у которого целая часть более одного знака, метод WriteLine() будет выводить более одной цифры слева от запятой (во избежание потери данных).

28