Файл: Понятие переменной в программировании. Виды и типы переменных.pdf
Добавлен: 29.03.2023
Просмотров: 230
Скачиваний: 1
Целочисленной переменной, в зависимости от разрядности компьютера, отводится в памяти компьютера один, два, четыре или восемь байтов. Она может хранить числа от нуля до 2 в 64-й степени минус 1. Таким образом, максимальное число которое может храниться в целочисленной переменной, равно 18,446,744,073,709,551,615 (18 квинтиллионов 446 квадриллионов 744 триллиона 073 миллиарда 709 миллионов 551 тысяча 615).
Для целочисленных переменных применимы следующие операции:
|
Операция |
Описание операции |
|
+ |
Сложение |
|
- |
Вычитание |
|
* |
Умножение |
|
/ |
Деление |
|
% |
Остаток от деления |
Сложение и умножение значений целых переменных выполняется так: сначала производится арифметическая операция, затем старшие разряды результата, вышедшие за 64 разрядов (отбрасываются). Операции удовлетворяют традиционным законам коммутативности, ассоциативности и дистрибутивности:
a + b = b + a , ab = ba
(a + b) + c = a + (b + c) , (ab)c = a(bc) a(b + c) = ab + ac
В языке С целым числам соответствуют типы int, char, bool
Вещественные переменные
Вещественные переменные бывают: с фиксированной точкой, то есть хранятся знак и цифры целой и дробной частей (в настоящее время в языках программирования реализуются редко), и с плавающей точкой, то есть вещественное число r имеет вид r= +- 2(в степени e) * m,
Число с плавающей запятой состоит из следующих частей:
- знак мантиссы (указывает на отрицательность или положительность числа). Под знак отводится 1 бит.
- показатель степени e, его называют порядком или экспонентой. Экспонента указывает степень двойки, на которую домножается число. Экспонента может быть как положительной, так и отрицательной (для чисел, меньших единицы). Под экспоненту отводится фиксированное число двоичных разрядов, обычно восемь или одиннадцать, расположенных в старшей части двоичного представления числа, сразу вслед за знаковым разрядом.
- мантисса m представляет собой фиксированное количество разрядов двоичной записи вещественного числа в диапазоне от 1 до 2: 1 <= m<2
Следует подчеркнуть, что левое неравенство нестрогое - мантисса может равняться единице, а правое - строгое, мантисса всегда меньше двух. Разряды мантиссы включают один разряд целой части, который ввиду приведенного неравенства всегда равен единице, и фиксированное количество разрядов дробной части. Поскольку старший двоичный разряд мантиссы всегда равен единице, хранить его необязательно, и в двоичном коде он отсутствует. Фактически двоичный код хранит только разряды дробной части мантиссы.
В языке С вещественным числам соответствуют типы float и double.
Элемент типа float занимает 4 байта, в которых один бит отводится под знак, восемь - под порядок, остальные 23 - под мантиссу (на самом деле, в мантиссе 24 разряда, но старший разряд всегда равен единице, поэтому хранить его не нужно). Тип double занимает 8 байтов, в них один разряд отводится под знак, 11 - под порядок, остальные 52 - под мантиссу. На самом деле в мантиссе 53 разряда, но старший всегда равен единице и поэтому не хранится. Поскольку порядок может быть положительным и отрицательным, в двоичном коде он хранится в смещенном виде: к нему прибавляется константа, равная абсолютной величине максимального по модулю отрицательного порядка. В случае типа float она равна 127, в случае double - 1023.
Основным типом является тип double, именно он наиболее естественен для компьютера. В программировании следует по возможности избегать типа float, так как его точность недостаточна, а процессор все равно при выполнении операций преобразует его в тип double. (Один из немногих случаев, где применение типа float оправдано, - трехмерная компьютерная графика.)
Несколько примеров представления вещественных чисел в плавающей форме:
- 1.0 = +20*1.0
Здесь порядок равен 0, мантисса - 1. В двоичном коде мантисса состоит из одних нулей, так как старший разряд мантиссы (всегда единичный) в коде отсутствует. Порядок хранится в двоичном коде в смещенном виде, он равен 127 в случае float и 1023 в случае double ;
- 3.5 = +21*1.75
Порядок равен единице, мантисса состоит из трех единиц, из которых в двоичном коде хранятся две: 1100...0 ; смещенный порядок равен 128 для float и 1024 для double ;
- 0.625 = +2-1*1.25
Порядок отрицательный и равен -1, дробная часть мантиссы равна 0100...0 ; смещенный порядок равен 126 для float и 1022 для double ;
- 100.0 = +26*1.5625
Порядок равен шести, дробная часть мантиссы равна 100100...0 ; смещенный порядок равен 133 для float и 1029 для double.
При выполнении сложения двух положительных плавающих чисел происходят следующие действия:
- выравнивание порядков. Определяется число с меньшим порядком. Затем последовательно его порядок увеличивается на единицу, а мантисса делится на 2, пока порядки двух чисел не сравняются. Аппаратно деление на 2 соответствует сдвигу двоичного кода мантиссы вправо, так что эта операция выполняется быстро. При сдвигах правые разряды теряются, из-за этого может произойти потеря точности (в случае, когда правые разряды ненулевые);
- сложение мантисс;
- нормализация: если мантисса результата стала равна или превысила двойку, то порядок увеличивается на единицу, а мантисса делится на 2. В результате этого мантисса попадает в интервал 1 <= m<2. При этом возможна потеря точности, а также переполнение, когда порядок превышает максимально возможную величину.
Вычитание производится аналогичным образом. При умножении порядки складываются, а мантиссы перемножаются как целые числа, после чего у результата правые разряды отбрасываются.
Символьные переменные
Символьная переменная хранит один символ из фиксированного набора. Такой набор обычно включает буквы, цифры, знаки препинания, знаки математических операций и различные специальные символы (процент, амперсенд, звездочка, косая черта и др.)
При этом могут использоваться различные кодировки, которые определяют, какому коду (двоичному числу) какой символ (знак) соответствует.
Кодировка определяется тремя параметрами:
1) диапазон значений кодов. например ASCII. стандартный код обмена информацией. от 0 до 127. требует 7 бит на символ. большинство современных кодировок имеют диапазон кодов от 0 до 255, т.е. 1 байт на символ. Unicode, — диапазон от 0 до 65535 — т.е. 2 байта (16 бит) на символ.
2) множеством изображаемых символов.
3) отображением множества кодов на множество символов. кодировки кои-8, cp-1251, и тд.
В языке C++ для Unicode существует тип wchar_t в котором под каждый символ отводится 2 байта.
К значениям этого типа могут применяться операции сравнения (в результате получается логическое значение). Символы считаются упорядоченными согласно своим кодам (номерам в кодовой таблице).
Логические переменные и выражения
В языке С++ определен логический тип данных bool, реализуемый одним байтом.
Данные этого типа имеют два значения: истина (true) и ложь (false). К ним могут применяться логические операции. Логические, или условные, выражения используются в качестве условия в конструкциях ветвления "если ... то ... иначе ... конец если" и цикла "пока". В первом случае в зависимости от истинности условия выполняется либо ветвь программы после ключевого слова "то", либо после "иначе"; во втором случае цикл выполняется до тех пор, пока условие продолжает оставаться истинным.
В некоторых языках, например С++, является подтипом числового типа, при этом ложь = 0, истина = 1.
В качестве элементарных условных выражений используются операции сравнения: можно проверить равенство двух выражений или определить, какое из них больше.
В языке С++:
- операция проверки равенства двух выражений обозначается двойным знаком равенства: == (в С++ не используется обычный знак равенства во избежание путаницы, поскольку часто знак равенства применяется для обозначения операции присваивания);
- неравенство обозначается: != (в С++ восклицательный знак используется для отрицания);
- Для сравнения величин выражений применяется четыре операции: больше > ; меньше < ; больше или равно >= ; меньше или равно <=;
Несколько примеров логических выражений:
x == 0 - выражение истинно, если значение переменной x равно нулю, и ложно в противном случае;
0!= 0 - выражение ложно;
3>= 2 - выражение истинно.
Из элементарных логических выражений и логических переменных можно составлять более сложные выражения, используя три логические операции "и", "или", "не":
- результат логической операции "и" истинен, когда истинны оба ее аргумента. Например, логическое выражение
0 <= x и x <= 1
истинно, когда значение переменной x принадлежит отрезку [0, 1]. Логическую операцию "и" называют также логическим умножением или конъюнкцией; в языке Си логическое умножение обозначается двойным амперсандом &&;
- результат логической операции "или" истинен, когда истинен хотя бы один из ее аргументов. Например, логическое выражение
x != 0 или y != 0
ложно в том и только том случае, когда значения обеих переменных x и y равны нулю. Логическую операцию "или" называют также логическим сложением или дизъюнкцией; в Си логическое сложение обозначается двойной вертикальной чертой ||;
- в отличие от логических операций "и" и "или", логическая операция "не" имеет только один аргумент. Ее результат истинен, когда аргумент ложен, и, наоборот, ложен, когда аргумент истинен. Например, логическое выражение
не x == 0
истинно, когда значение переменной x отлично от нуля. Логическая операция "не" называется логическим отрицанием (иногда негацией); в Си логическое отрицание обозначается восклицательным знаком "!".
2. Практическое использование переменных в программировании
2.1 Основные элементы программирования
Над переменными можно совершать различные действия: складывать их, вычитать, делить друг на друга, умножать.
Разумеется, количество операций над переменными не ограничивается этими четырьмя и может очень сильно варьироваться в зависимости от того, какую информацию хранит переменная и на каком языке программирования пишется код.
Для использования переменной необходимо выполнить три действия:
- Объявить переменную. Сообщить программе имя и тип переменной, которую требуется использовать.
- Присвоить переменной значение. Передать переменной значение для хранения.
- Непосредственно использовать переменную. Извлечь значение, содержащееся в переменной, и использовать его в программе.
Синтаксис определения переменной выглядит следующим образом:
тип_переменной имя_переменной;
Простейшее определение переменной:
int age; // мы объявили переменную age типа int
Здесь определена переменная age, которая имеет тип int. Поскольку определение переменной представляет собой инструкцию, то после него ставится точка с запятой.
Имена переменных могут быть любыми. Однако есть несколько общих правил их написания:
- Желательно давать переменным осмысленные имена, говорящие о назначении данных, на которые они ссылаются.
- Имя переменной не должно совпадать с командами языка (зарезервированными ключевыми словами).
- Имя переменной должно начинаться с буквы или символа подчеркивания (_).
Переменная должна быть объявлена до ее использования.
При попытке использовать переменную, которая не была объявлена, код не будет компилироваться, о чем вас предупредит компилятор.
Вот несколько примеров
// Правильные переменные
_cat = "кот";
Kitten3 = "Котенку 3 года";
Cat_Name = "Кота зовут Рыжик";
// Неправильные переменные
3Kitten = "кошка"; //начинается с цифры
Cat,Me = "Meow"; //нельзя использовать запятую
Можно объявлять более одной переменной в одном операторе присваивания. В этом случае все переменные отделяются запятыми и принадлежат к одному типу
int Cats, Kittens, Dogs;
Кроме того, можно сразу инициализировать объявляемую переменную
int Cats = 7;
Можно также инициализировать переменную динамически, используя любое действительное выражение. Например, мы хотим вычислить периметр квадрата:
int widthSquare = 5; // ширина квадрата
// динамически инициализируем переменную perimeter
int perimeter = widthSqare * 4;
После определения переменной можно присвоить некоторое значение: Связь между данными и переменными устанавливается с помощью знака =. Такая операция называется присваиванием (инициализацией).
int x;
x = 2
То есть в данном случае переменная x (левый операнд) будет иметь значение 2 (правый операнд).
При этом операции присваивания имеют правосторонний порядок, то есть выполняются справа налево. И, таким образом, можно выполнять множественное присваивание:
int a, b, c;
a = b = c = 34;
Здесь сначала вычисляется значение выражения c = 34. Значение правого операнда - 34 присваивается левому операнду с. Далее вычисляется выражение b = c: значение правого операнда c (34) присваивается левому операнду b. И в конце вычисляется выражение a = b: значение правого операнда b (34) присваивается левому операнду a.