Часть I. Базовые сведения о программировании на языке C#
Обсудим этот пример. Сдвигаемое число — число со знаком. В данном
случае знак — плюс. Из предыдущего примера мы видели, что в бито-
вом представлении число 40 имеет вид 101000. Сдвигаем его на 5 разря-
дов вправо. Добавляем знак "плюс". Получаем число 1.
Операторы сдвига имеют короткую форму в виде
r<или
r>>d;
. Это
означает, что
r=r<или
r=r>>d;
.
Для отрицательных чисел задача несколько усложняется (для ручной
проверки, потому что среда программирования это делает сама).
Запишем:
int i = -40;
Console.WriteLine(i >> 5);
После компиляции и выполнения получим результат: –2.
Как он получился? Дело в том, что вычисления в компьютере для отри-
цательных чисел организованы в так называемом дополнительном коде.
Дополнительный
код
— наиболее распространенный способ представ-
ления отрицательных целых чисел в компьютерах. Он позволяет заме-
нить операцию вычитания операцией сложения и сделать операции
сложения и вычитания одинаковыми для знаковых и беззнаковых чисел.
Преобразование числа из прямого кода в
дополнительный
осуществля-
ется по следующему алгоритму.
1.
Если число, записанное в прямом коде, положительное, то к нему
(к младшему разряду) дописывается старший (знаковый) разряд, ко-
торый равен 0, и на этом преобразование заканчивается.
2.
Если число, записанное в прямом коде, отрицательное, то все разря-
ды числа, кроме знакового, инвертируются (нули заменяются едини-
цами, а единицы — нулями), а к младшему разряду результата при-
бавляется 1. К получившемуся числу дописывается старший (знако-
вый) разряд, равный 1, потому что отрицательное число имеет
в знаковом разряде 1.
Рассмотрим пример. Преобразуем отрицательное число –5, записанное в
прямом коде, в число в дополнительном коде. Прямой код числа –5,
взятого по модулю (т. е. без знака): 101. Инвертируем все разряды чис-
ла, получая таким образом
обратный
код
: 010. Добавим к результату 1.
Получим 011. Допишем слева знаковый единичный разряд. Получим
1011. Это и есть дополнительный код числа –5.
Для нашего примера –40 в двоичном виде без знака равно 101000. Ин-
вертируем это число и получаем его обратный код: 010111. Добавляем
к младшему разряду 1. Получаем 011000. Дописываем слева знаковый
разряд. Получаем дополнительный код: 1011000. Сдвигаем все вправо
на 5 разрядов. Результат: 10. Но это битовая величина. Десятичная
будет 2. Добавляем знак "минус". Получаем –2.
ГЛ А В А
4
Функции
В процессе программной реализации алгоритмов часто возникает необ-
ходимость выполнения повторяющихся действий на разных группах
данных. Например, требуется вычислять синусы заданных величин или
начислять заработную плату работникам. Ясно, что неразумно всякий
раз в таких случаях создавать заново соответствующую программу
именно под конкретные данные. Напрашивается вывод, что этот про-
цесс надо как-то параметризовать, т. е. создать такую параметрическую
программу, которая могла бы, например, вычислять синус от любого
аргумента, получая извне его конкретное значение, или такую, которая
бы начисляла зарплату любому работнику, получая данные конкретного
работника. Такие программы, созданные с использованием формальных
значений своих параметров, при передаче им конкретных значений па-
раметров возвращают пользователю результаты расчетов. Их называют
функциями
по аналогии с математическими функциями.
Если в математике определена некая функция
y
=
f
(
x
1
,
x
2
, ...,
x
N
), то на
конкретном наборе данных {
x
11
,
x
21
, ...,
x
N
1
} эта функция возвратит вы-
численное ею значение
y
1
=
f
(
x
11
,
x
21
, ...,
x
N
1
). В данном случае можем
сказать, что аргументы
x
1
,
x
2
, ...,
x
N
— это формальные параметры функ-
ции
f
(), a
x
11
,
x
21
, ...,
x
N
1
— их конкретные значения. Функция в С# объ-
является почти аналогичным образом: задается тип возвращаемого ею
значения (из рассмотренного материала мы знаем, что переменные мо-
гут иметь типы
int
,
float
,
long
и т. д.; тип значения, возвращаемого
функцией, может быть таким, как и тип переменных); после задания
типа возвращаемого значения задается имя функции (как и для матема-
тической функции). Затем в круглых скобках указываются ее аргумен-
ты —
формальные
параметры
, каждый из которых должен быть описан
так, как если бы он описывался в программе самостоятельно вне функ-
ции. Это только первая часть объявления функции.
86
Do'stlaringiz bilan baham: |