Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Понятие переменной в программировании. Виды и типы переменных (ПЕРЕМЕННЫЕ)

Содержание:

ВВЕДЕНИЕ

В реальной жизни мы совершаем различные действия над окружающими нас предметами, или объектами. Мы меняем их свойства, наделяем новыми функциями. По аналогии с этим компьютерные программы также манипулируют объектами, только виртуальными, цифровыми. Такие объекты называются данными.

Очевидно, данные бывают разными. Часто компьютерной программе приходится работать с числами и строками. Числа в свою очередь также бывают разными: целыми, вещественными, могут иметь огромное значение или очень длинную дробную часть.

В данной работе будут рассмотрены все основные особенности данных и работа с ними.

1 ПЕРЕМЕННЫЕ

Для начала необходимо рассмотреть языки программирования в широком плане. Другими словами, ознакомиться для начала с самыми общими категориями, так или иначе практически воплотившимися во всех современных языках программирования. Это является основой для любого изучения программирования. Более того, не овладев общими понятиями, нельзя эффективно продвигаться в решении конкретных задач, усваивать уже устоявшиеся, а также новые технологии программирования.

Все языки программирования включают в себя, по меньшей мере, следующие понятия:

  1. переменные и типы данных:
  2. массивы данных;
  3. функции;
  4. объекты;
  5. операторы;
  6. выражения.

Эти краеугольные составляющие могут воплощаться или, другими словами, поддерживаться различными языками по-разному. Для лучшего понимания можно провести аналогии с естественными языками.

Естественные языки базируются на таких категориях, как имя существительное, имя прилагательное, глагол и т. п. Слова, которые мы встречаем в обычной живой речи, принадлежат к той или иной категории языка. Так, слово "стол" — имя существительное, "красный" — прилагательное, а "писать" — глагол.

Категории естественного языка воплощаются в речи, исполняя ту или иную роль члена предложения (выражения языка), например, подлежащего, сказуемого, определения, дополнения, обстоятельства. При этом исходные слова адаптируются согласно правилам построения предложений. Так, существительные и прилагательные склоняются по падежам, а глаголы спрягаются по временам. Вместе с тем слово одной и той же категории в предложении может выполнять различные функции. Например, существительное может фигурировать в предложении и как подлежащее (главный член предложения), и как дополнение (второстепенный член), в зависимости от структуры предложения. Итак, слова различных категорий языка, т. е. составляющих его базу, могут выполнять различные роли в предложении, или реализации словоупотребления. Как и в естественном языке, примерно то же самое происходит и в языках программирования.

Важнейшим в программировании является понятие переменной, с уяснения которого и следует начать. Оно изначально возникло в математике задолго до появления первых вычислительных устройств и программ для них. В математике под переменной понимают то, что может быть заменено конкретным значением. В уравнениях, известных вам еще со школы, фигурируют переменные, обозначаемые чаще всего символом х. Разумеется, обозначать переменные можно и другими буквами или их последовательностями (например, s, myvar или сумма). Вот типичный пример уравнения, встречающегося в математике: (x/2) — 2 = 0.

Здесь х — символ, вместо которого можно подставлять различные значения, но не совсем произвольные, а именно числа. При этом говорят также, что х "пробегает" значения из множества чисел. Заметьте, что данная переменная не может принимать значения в виде строк, составленных из букв, а также дат (например, 16.12.2007) или других данных нечислового типа. Иначе говоря, переменная в математике — это символьное обозначение некоторого числового значения, но не любого, а лишь принадлежащего определенному множеству, например, всех чисел, или только действительных, или только целых, или каких-то других. Таким образом, переменная — это заместитель в некотором выражении (формуле) конкретного значения из наперед заданного множества или, как еще говорят, типа данных.

Итак, переменная может фигурировать в некотором математическом выражении. Переменная выполняет исключительно "представительские" функции. Она, так сказать, представляет некоторое, а лучше сказать, любое значение из заранее определенного множества, которое можно назвать типом значений.

Те, кто учился в школе, легко могут понять, что приведенное выше выражение констатирует тот факт, что X деленный на 2 и за вычетом двух равно нулю. Сам собой напрашивается вопрос: а каково конкретное значение переменной, которое обеспечивает выполнение данного равенства?

Столкнувшись с некоторым уравнением, вы сразу же формулируете некую математическую задачу, решение которой должны дать математики. Естественно, встреча с чем-то новым порождает попытку понять, к чему бы это. Если это математическое уравнение, то само собой речь пойдет о его решении, т.е. о вычислении тех значений переменной, при которых данное уравнение выполняется. Однако с точки зрения программирования дело совсем не в этом.

В математике, по крайней мере в школьной, обычно рассматривают всяческие уравнения и неравенства. При этом зачастую сложные и длинные выражения обозначают более компактными именами, т. е. вводят в обиход новые переменные. Этот прием позволяет в дальнейшем сократить математические выкладки, заменяя данное многосимвольное выражение более коротким. В математике в договоре о новом обозначении или, другими словами, о вводе новой переменной, обычно говорят что-то в следующем духе:

"обозначим через у выражение (x/2) — 2";

"пусть у равно (x/2) — 2".

Как в математике, так и в программах подобные предложения записывают кратко: у = (x/2) — 2. Если в математике данное выражение является краткой записью соглашения о введении нового обозначения или констатацией равенства значений левой и правой частей равенства, то в программировании это команда, требующая присвоить переменной у значение выражения, расположенного справа от знака равенства. Чтобы эта команда могла быть выполнена компьютером. необходимо сначала вычислить значение выражения справа от знака равенства, и только потом присвоить полученное значение переменной.

В математике данное выражение обычно трактуется как утверждение о том, что левая часть равенства эквивалентна правой. Соответствующее предложение на естественном языке имеет изъявительное наклонение, т. е. это повествовательное предложение, утверждающее в данном случае факт равенства. В повелительном наклонении то же предложение можно сформулировать, например, так: "пусть (x/2) — 2 = 0". В переводе на язык программирования выражение (x/2) — 2 = 0 следует понимать не как требование присвоить левой части равенства значение правой, а как утверждение о равенстве левой и правой частей, истинность которого еще необходимо проверить. Иначе говоря, с точки зрения языка программирования данная запись соответствует операции сравнения выражений слева и справа от знака равенства. Результатом этого может быть одно из двух: ИСТИНА (если левая и правая части оказались равными) или ЛОЖЬ (в противном случае). Таким образом, выражение (x/2) — 2 = 0 следует трактовать как "проверить, выполняется ли равенство (x/2) — 2 = 0". Разумеется, такая проверка предполагает подстановку в его выражение конкретного значения вместо символа х.

Таким образом знак равенства в выражениях языка может играть две совершенно различных роли. Во-первых, в простейших выражениях вида х = 5 он обозначает повеление присвоить переменной х некоторое значение (в данном случае 5). Во-вторых, в выражениях вида (x/2) — 2 = 0 тот же знак равенства следует трактовать как операцию сравнения того, что находится слева от него, с тем, что расположено справа.

Однако при изучении математики с этим не возникало особых проблем. Именно потому, что один и тот же знак равенства может выполнять в математических выражениях различные роли, в языках программирования для каждой из этих ситуаций обычно предусматривают свой знак. Так например, для присваивания переменной некоторого значения обычно используют символ =, а для сравнения значений двух выражений на предмет их равенства — двойной символ равенства ==.

Например, выражение у = (x/2) — 2 в программе следует понимать как команду присвоить переменной у значение выражения (x/2) — 2, а выражение у == (x/2) — 2 — как операцию сравнения значений у и (x/2) — 2. Таким образом снимается проблема неоднозначной интерпретации операций, которые должен произвести компьютер. Замечу попутно, что в некоторых языках для присваивания употребляют символ :=, а для сравнения =. Однако все это— особенности синтаксиса конкретных языков программирования, которые легко освоить с помощью справочников. Никогда синтаксис языка, каким бы вычурным он ни был, не создавал настоящих проблем для его изучения. Трудности возникают при словоупотреблении и формировании предложений. Человек, изучающий не первый в своей жизни язык программирования, легко и непринужденно усваивает его скучные нотации и спецификацию потому, что уже имеет некоторый опыт составления осмысленных предложений на искусственных языках.

В качестве тестового примера рассмотрим выражение вида х = х + 1. С точки зрения математики данное уравнение не имеет решения, поскольку легко преобразуется к виду 0 = 1, что, очевидно, никогда не выполняется (данное равенство ложно). А раз так, то оно нам и не интересно. Однако с точки зрения программирования подобная запись, означающая присвоение переменной х значения выражения х + 1, имеет смысл. Что же должен сделать компьютер, выполняя данное выражение? Нетрудно догадаться, что к текущему значению переменной х следует прибавить единицу и полученный результат присвоить этой же переменной x. Другими словами, мы можем в качестве нового значения переменной использовать результат каких-то преобразований ее предыдущего значения.

Итак, в математике переменная, обозначаемая каким-нибудь именем из одного или нескольких символов, представляет (обозначает) собой некоторое значение из заранее оговоренного множества допустимых величин. В языках программирования понятие переменной имеет аналогичный смысл — это контейнер для хранения данных. Данные, которые могут храниться в переменной, называют значениями этой переменной. Они могут быть весьма разнородными: числами, текстовыми строками, датами, массивами и др.

2 ТИПЫ ДАННЫХ

Данные группируют в множества, называемые типами данных. Простейшие примеры типов данных — числа и произвольные последовательности символов (строки), встречаются и другие, например, дата, время и т. д. Переменные классифицируют в зависимости от типа данных, которые они могут хранить. Так, например, если переменная предназначена для хранения чисел, то говорят, что она имеет числовой тип или, короче, что это числовая переменная.

Вспомним элементарную арифметическую задачу из сказки про Буратино: "Вы имеете три яблока и одно из них отдали мне. Сколько яблок у Вас осталось?". В жизни, как только встречаемся с числами, мы обычно абстрагируемся от того, к чему они относятся, к яблокам, автомобилям или еще чему-то. Поскольку в данном случае речь идет об изъятии яблока, то мы считаем, что этой операции соответствует обыкновенное вычитание одного числа из другого. Таким образом, мы абстрагируемся от яблок, оставляя в поле зрения только их количества, а передачу яблок другому лицу интерпретируем как арифметическую операцию вычитания или прибавления. Это настолько естественно, что и программист должен рассуждать аналогично.

В рассматриваемом нами случае программист мог выполнить все необходимые интерпретации условия задачи в уме, а машине поручить лишь рутинную операцию арифметического вычитания над числами 3 и 1, а именно вычислить значение выражения 3 - 1. Компьютер, очевидно, выдал бы в результате число 2, а программист сказал нам: "останется два яблока". Однако возможен и иной ход событий. Если в компьютер ввести данные в другой форме: "3 яблока" и "1 яблоко", то что получится в результате попытки вычислить выражение "3 яблока" - "1 яблоко"? Очевидно, произойдет попытка выполнить арифметическую операцию не над числами, а над символьными строками, пусть даже и содержащими числа. Это, возможно, поставит компьютер в тупик.

Тупик будет более очевидным, если мы предложим компьютеру выполнить такую операцию: "Саша" — "Маша". Данные, участвующие в этой операции, не содержат чисел, а потому у нас нет никакого разумного основания интерпретировать действие, обозначенное символом "минус", как арифметическое вычитание. Что должно получиться в итоге? Каким должно быть слово, являющееся результатом данной операции?

Не исключено, что можно придумать некоторую особую интерпретацию этой операции. Например, пусть это будет буквосочетание, которое в качестве фрагмента есть в первом, но отсутствует во втором слове. Однако такое определение слишком специфично или, иначе говоря, не общезначимо, а потому нам проще объявить данное и подобные выражения лишенными смысла и запретить их использовать в конструкциях языка программирования.

В жизни мы имеем дело с различными данными, относя их к разным типам по той простой причине, что для одного типа данных имеют смысл и допустимы одни операции, а для другого — другие. То, что можно делать с числами, интерпретируя операции над ними в математике, нельзя выполнять с последовательностями произвольных символов, сохраняя при этом интерпретацию результата в той же математике. Наоборот, мы можем склеивать две последовательности символов или отсекать от них ненужные части, но результат подобных операций можно осмыслить, например, в редакторской деятельности, но только не в математике. Поэтому последовательности произвольных символов (строки) выделяют в отдельный тип данных.

Далее, дату можно представить в виде набора из трех чисел (число, месяц и год), которые обычно отделяют друг от друга в одной записи точками. Очевидно, что сложение двух дат едва ли можно понять как сложение двух чисел. Набор из нескольких чисел — более сложный объект, чем отдельное число. Однако прибавление к дате некоторого обычного числа вполне разумно интерпретировать как некую новую дату, следующую за исходной спустя заданное число дней. Вычисление этой даты, т. е. представление в виде набора из трех чисел не совсем тривиально (нужно знать, сколько дней в каждом месяце и году). Иначе говоря, операции над датами отличаются от простых арифметических операций над обычными числами, а потому даты также относят к особому типу данных.

В языках программирования существуют так называемые встроенные типы данных. Это общезначимые, наиболее часто употребляемые и достаточно отчетливо интерпретируемые всеми типы. Вместе с тем, современные языки программирования допускают задание программистом своих особенных типов данных. Например, вы можете определить тип данных НЕДЕЛЯ, который содержит 7 элементов, представленных целыми числами (например, 1, 2,...,7) или названиями дней (например, "понедельник", "вторник", ..., "воскресенье").

Во многих языках (например, С и Pascal) переменные и их тип должны быть объявлены прежде, чем они будут использованы в программе. Если при этом переменная изначально была объявлена, например, как числовая, то уже нигде в программе ей нельзя присвоить значение какого-нибудь другого типа. Говорят, что это языки с сильным контролем типов. Однако есть языки со слабым контролем типов (их еще называют языками со свободными или динамическими типами), типичные примеры — JavaScript и РНР. В них тип переменной не фиксируется раз и навсегда в пределах программы, одна и та же переменная в различных фрагментах программы может принимать значения то одного, то другого типа по усмотрению программиста.

3 ТИПЫ ПЕРЕМЕННЫХ

Переменные могут быть глобальными и локальными. Глобальные доступны (т. е. видны) из любого места программы, локальные — только в том блоке программного кода (фрагменте программы), где они были созданы. Типичный пример блока кода — функция. Функция может содержать в своем коде переменные, недоступные (невидимые) из внешней по отношению к ней части программы.

Переменная в императивном программировании — поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Данные, находящиеся в переменной (то есть по данному адресу памяти), называются значением этой переменной.

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

Область видимости и/или время существования переменной в некоторых языках задаётся классом памяти: Статическая и динамическая типизация переменных.

Если тип переменной определяется на этапе компиляции, имеет место статическая типизация, а если на этапе выполнения программы — динамическая. В последнем случае иногда говорят, что переменная не имеет типа, хотя данные, содержащиеся в ней, безусловно, относятся к определённому типу данных, но выясняется это уже во время выполнения программы.

В большинстве случаев статическая типизация позволяет уменьшить затраты ресурсов при выполнении программы, поскольку для динамической типизации требуются затраты ресурсов на выяснение типов данных их приведение в выражениях с смешанными типами. Статическая типизация позволяет перекладывать проверку типов на этапе компиляции программы. Это также упрощает обнаружение ошибок ещё на этапе разработки, когда их исправление обходится менее дорого. Тем не менее во многих случаях необходимо применение динамической типизации. Например, необходимость поддержания совместимости при переходе на новый формат представления данных (например, старая часть проекта посылает процедуре дату символьной строкой, а новые объекты используют более современный числовой тип).

Адрес поименованной ячейки памяти также может определяться как на этапе компиляции, так и во время выполнения программы. По времени создания переменные бывают статическими и динамическими. Первые создаются в момент запуска программы или подпрограммы, а вторые создаются в процессе выполнения программы.

Динамическая адресация нужна только тогда, когда количество поступающих на хранение данных заранее точно не известно. Такие данные размещают в специальных динамических структурах, тип которой выбирается в соответствии со спецификой задачи и с возможностями выбранной системы программирования. Это может быть стек, куча, очередь и т. п. Даже файл, в том смысле, который заложил Н.Вирт в Паскаль, является динамической структурой.

По зоне видимости различают локальные и глобальные переменные. Первые доступны только конкретной подпрограмме, вторые — всей программе. С распространением модульного и объектного программирования, появились ещё и общие переменные (доступные для определённых уровней иерархии подпрограмм). Область видимости иногда задаётся классом памяти. Ограничение видимости может производиться путём введения пространств имён.

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

По наличию внутренней структуры, переменные могут быть простыми или сложными (составными).

Простые переменные не имеют внутренней структуры, доступной для адресации. Последняя оговорка важна потому, что для компилятора или процессора переменная может быть сколь угодно сложной, но конкретная система (язык) программирования скрывает от программиста её внутреннюю структуру, позволяя адресоваться только «в целом».

Сложные переменные программист создаёт для хранения данных, имеющих внутреннюю структуру. Соответственно, есть возможность обратиться напрямую к любому элементу. Самыми характерными примерами сложных типов являются массив (все элементы однотипные) и запись (элементы могут иметь разный тип).

Следует подчеркнуть относительность такого деления: для разных программ одна и та же переменная может иметь разную структуру. Например, компилятор различает в переменной вещественного типа 4 поля: знаки мантиссы и порядка, плюс их значения, но для программиста, компилирующего свою программу, вещественная переменная — единая ячейка памяти, хранящая вещественное число.

4 ПЕРЕМЕННЫЕ В ЯЗЫКЕ С++

Для хранения различных данных в языках программирования используют переменные. Переменной называется область памяти, имеющая имя, которое иначе называют идентификатором.

Давая переменной имя, программист одновременно тем же именем называет и область памяти, куда будут записываться значения переменной для хранения.

Хорошим стилем является осмысленное именование переменных. Разрешается использовать строчные и прописные буквы, цифры и символ подчёркивания, который в С++ считается буквой. Первым символом обязательно должна быть буква, в имени переменной не должно быть пробелов. В современных версиях компиляторов длина имени практически не ограничена. Имя переменной не может совпадать с зарезервированными ключевыми словами. Заглавные и строчные буквы в именах переменных различаются, переменные a и A — разные переменные.

Пример зарезервированных ключевых слов:

1 and альтернатива оператору &&

2 and_eq альтернатива оператору &=

3 asm вставить код на ассемблере

4 auto объявить локальную переменную

5 bitand альтернатива оператору bitwise &

6 bitor альтернатива оператору |

7 bool объявить булеву переменную

8 break выйти с цикла

9 case определенная ветка в операторе ветвления switch

10 catch обработать исключение от throw

11 char объявить символьную переменную

12 class объявить класс

13 compl альтернатива оператору ~

14 const объявить неизменяемые данные или функцию, которая не изменяет данных

15 const_cast приведение типа от константной переменной

16 continue пропустить код до конца цикла и начать новую итерацию

17 default вариант по умолчанию в switch

18 delete освобождение памяти, выделенной new

19 do оператор цикла

20 double объявить вещественное число двойной точности

21 dynamic_cast выполнить приведение типов во время выполнения

22 else ветка оператора if, которая выполняется при ложном условии

23 enum создание перечисляемого типа

24 explicit использовать данный конструктор только при полном соответствии типов

25 export позволить разделить объявление и реализацию шаблона

26 extern указание компилятору, что переменная объявлена в другом файле

27 false константа для ложного значения булевой переменной

28 float объявить вещественную переменную

29 for оператор цикла

30 friend разрешить другим функциям доступ к приватным данным класса

31 goto безусловный переход

32 if оператор условия

33 inline оптимизация вызовов для функций (встраиваемые функции)

34 int объявить переменную целого типа

35 long объявить следующий тип длинным

36 mutable перекрыть константность

37 namespace определить новое пространство имен

38 new выделить динамическую память под новую переменную

39 not альтернатива оператору !

40 not_eq альтернатива оператору !=

41 operator создание перегруженных операторов

42 or альтернатива оператору ||

43 or_eq альтернатива оператору |=

44 private объявить приватное поле класса

45 protected объявить защищенное поле класса

46 public объявить общее поле класса

47 register запрос компилятору на оптимизацию переменной по скорости

48 reinterpret_cast изменить тип переменной

49 return возврат из функции

50 short объявить короткое целое

51 signed сделать данный целый тип знаковым

52 sizeof возвратить размер переменной или типа

53 static создать статическую переменную

54 static_cast сделать не полиморфное приведение типов

55 struct определить новую структуру

56 switch оператор ветвления

57 template создать шаблонную функцию

58 this указатель на текущий объект

59 throw выбросить исключение

60 true константа для истинного значения булевой переменной

61 try выполнить код, который может выкинуть исключение

62 typedef создание нового типа с существующего

63 typeid задать описание объекта

64 typename объявить класс или иной новый тип данных

65 union структура, содержащая несколько переменных в одной области памяти

66 unsigned объявить беззнаковое целое

67 using импортировать полностью или частично указанное пространство имен внутрь текущего блока

68 virtual создать виртуальную функцию

69 void объявить функцию или переменную без типа

70 volatile предупреждение компилятору, что переменная может измениться сама

71 wchar_t объявить переменную типа wide-character

72 while оператор цикла

73 xor альтернатива оператору ^

74 xor_eq альтернатива оператору ^=

В языке С++ все переменные должны быть объявлены. Это означает, что, во-первых, в начале каждой программы или функции Вы должны привести список всех используемых переменных, а во-вторых, указать тип каждой из них.

При объявлении переменной компилятор отводит ей место в памяти в зависимости от её типа. Стандартными средствами AVR GCC работает с типами данных char (символьный тип) и int(целочисленный тип).

char - является самым экономным типом. Тип char может быть знаковым и беззнаковым. Обозначается, соответственно, как "signed char" (знаковый тип) и "unsigned char" (беззнаковый тип). Знаковый тип может хранить значения в диапазоне от -128 до +127. Беззнаковый - от 0 до 255. Под переменную типа char отводится 1 байт памяти (8 бит).

Ключевые слова (модификаторы) signed и unsigned указывают, как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в противном случае нулевой бит интерпретируется как знаковый.

Целочисленная величина int может быть short (короткой) или long (длинной).

Ключевое слово (модификатор) short ставится после ключевых слов signed или unsigned. Таким образом, различают следующие типы: signed short int, unsigned short int, signed long int, unsigned long int.

Переменная типа signed short int (знаковая короткая целая) может принимать значения от -32768 до +32767, unsigned short int (беззнаковая короткая целая) - от 0 до 65535. Под каждую из них отводится ровно по два байта памяти (16 бит).

При объявлении переменной типа signed short int ключевые слова signed и short могут быть пропущены, и такой тип переменной может быть объявлен просто int. Допускается и объявление этого типа одним ключевым словом short.

Переменная unsigned short int может быть объявлена как unsigned int или unsigned short.

Под каждую величину signed long int или unsigned long int отводится 4 байта памяти (32 бита). Значения переменных этого типа могут находиться в интервалах от -2147483648 до 2147483647 и от 0 до 4294967295 соответственно.

Существуют также переменные типа long long int, для которых отводится 8 байт памяти (64 бита). Они также могут быть знаковыми и беззнаковыми. Для знакового типа диапазон значений лежит в пределах от -9223372036854775808 до 9223372036854775807, для беззнакового - от 0 до 18446744073709551615. Знаковый тип может быть объявлен и просто двумя ключевыми словами long long.

Тип

Диапазон

Шестнадцатиричный диапазон

Размер

unsigned char

0 ... 255

0x00 ... 0xFF

8 bit

signed char 
или просто
char

-128 ... 127

-0x80 ... 0x7F

8 bit

unsigned short int
или просто
unsigned int или unsigned short

0 ... 65535

0x0000 ... 0xFFFF

16 bit

signed short int или signed int
или просто
short или int

-32768 ... 32767

0x8000 ... 0x7FFF

16 bit

unsigned long int
или просто
unsigned long

0 ... 4294967295

0x00000000 ... 0xFFFFFFFF

32 bit

signed long
или просто
long

-2147483648 ... 2147483647

0x80000000 ... 0x7FFFFFFF

32 bit

unsigned long long

0 ... 18446744073709551615

0x0000000000000000 ... 0xFFFFFFFFFFFFFFFF

64 bit

signed long long
или просто
long long

-9223372036854775808 ... 9223372036854775807

0x8000000000000000 ... 0x7FFFFFFFFFFFFFFF

64 bit

Переменные объявляют в операторе описания. Оператор описания состоит из спецификации типа и списка имён переменных, разделённых запятой. В конце обязательно должна стоять точка с запятой.

Объявление переменной имеет следующий формат: 
[модификаторы]  спецификатор_типа  идентификатор  [, идентификатор] ...

Модификаторы - ключевые слова signed, unsigned, short, long.

Спецификатор типа - ключевое слово char или int, определяющее тип объявляемой переменной.

Идентификатор - имя переменной.

Пример:

char x;

int a, b, c;

unsigned long long y;

Таким образом, будут объявлены переменные x, a, b, c, y.

В переменную x можно будет записывать значения от -128 до 127.

В переменные a, b, c - от -32768 до +32767.

В переменную y - от 0 до 18446744073709551615.

При объявлении переменную можно проинициализировать, то есть присвоить ей начальное значение. Сделать это можно следующим образом.

int x = 100;

Таким образом, в переменную x при объявлении сразу же будет записано число 100. Лучше избегать смешивания инициализируемых переменных в одном операторе описания, то есть инициализируемые переменные лучше объявлять в отдельных строках.

Переменная любого типа может быть объявлена как немодифицируемая. Это достигается добавлением ключевого слова const к спецификатору типа. Переменные с типом const представляют собой данные, используемые только для чтения, то есть этой переменной не может быть присвоено новое значение. Если после слова const отсутствует спецификатор типа, то константы рассматриваются как величины со знаком, и им присваивается тип int или long int в соответствии со значением константы: если константа меньше 32768, то ей присваивается тип int, в противном случае long int.

Пример:

const long int k = 25;

const m = -50; // подразумевается const int m=-50

const n = 100000; // подразумевается const long int n=100000

Для присваивания в С++ служит знак "=". Выражение, стоящее справа от знака присваивания, вычисляется, и полученное значение присваивается переменной, стоящей слева от знака присваивания. При этом предыдущее значение, хранящееся в переменной, стирается и заменяется на новое.

Оператор "=" не следует понимать как равенство.
Например, выражение a = 5; следует читать как "присвоить переменной a значение 5".

Примеры:

x = 5 + 3; // сложить значения 5 и 3, результат присвоить переменной x (записать в переменную x)

b = a + 4; // прибавить 4 к значению, хранящемуся в переменной a, полученный результат присвоить переменной b (записать в переменную b)

b = b + 2; // прибавить 2 к значению, хранящемуся в переменной b, полученный результат присвоить переменной b (записать в переменную b)

В правой части значение переменной может использоваться несколько раз:

c = b * b + 3 * b;

Арифметические операции записываются в выражениях следующим образом:

+

Плюс

-

Минус

*

Умножить

/

Разделить

Пример:

x = 3; // переменной x будет присвоено значение 3

y = x + 5; // к значению, хранящемуся в переменной x, будет прибавлено число 5, полученный результат будет записан в переменную y

z = x * y; // значения переменных x и y будут перемножены, результат будет записан в переменную z

z = z - 1; // от значения, хранящегося в переменной z, будет отнято 1, результат будет записан в переменную z

Таким образом, в переменной z будет храниться число 23

Кроме простого оператора присваивания "=", в Си существует еще несколько комбинированных операторов присваивания: "+=", "-=", "*=<", "/=", "%=". Примеры:

x += y; // то же, что и x = x + y; - сложить x и y и записать результат в переменную x

x -= y; // то же, что и x = x - y; - отнять от x значение y и записать результат в переменную x

x *= y; // то же, что и x = x * y; - умножить x на y и записать результат в переменную x

x /= y; // то же, что и x = x / y; - разделить x на y и записать результат в переменную x

x %= y; // то же, что и x = x % y; вычислить целочисленный остаток от деления x на y и записать результат в переменную x

Если необходимо изменить значение переменной на 1, то используют инкремент или декремент. Инкремент - операция увеличения значения, хранящегося в переменной, на 1.

Пример:

x++; // значение переменной x будет увеличено на 1

Декремент - операция уменьшения значения, хранящегося в переменной, на 1. Пример:

x--; // значение переменной x будет уменьшено на 1

Инкремент и декремент относятся к операциям присваивания. При использовании декремента и инкремента совместно с оператором присваивания "=" применяют постфиксную (x++) или префиксную (++x) запись. Первой выполняется префиксная запись.

Примеры:

y = x++;

Предположим, что в переменной x хранилось значение 5. Тогда в y будет записано значение 5, после чего значение переменной x будет увеличено на 1. Таким образом, в y будет 5, а в x - 6.

y = --x;

Если в x хранилось значение 5, то сначала будет выполнено уменьшение x до 4, а затем это значение будет присвоено переменной y. Таким образом, x и y будет присвоено значение 4.

СПИСОК ЛИТЕРАТУРЫ

  1. Ашарина, И.В. Основы программирования на языках C и C++ / И.В. Ашарина. - М.: ГЛТ, 2012. - 208 c.
  2. Гавриков, М.М. Теоретические основы разработки и реализации языков программирования: Учебное пособие / М.М. Гавриков, А.Н. Иванченко, Д.В. Гринченков. - М.: КноРус, 2010. - 184 c.
  3. Дорогов, В.Г. Основы программирования на языке С: Учебное пособие / В.Г. Дорогов, Е.Г. Дорогова; Под общ. ред. проф. Л.Г. Гагарина. - М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2013. - 224 c.
  4. Зыков, С.В. Основы современного программирования: Учебное пособие для вузов / С.В. Зыков. - М.: ГЛТ , 2012. - 444 c.
  5. Культин, Н.Б. Основы программирования в Turbo C++ / Н.Б. Культин. - СПб.: BHV, 2013. - 464 c.
  6. Кундиус, В.А. Теоретические основы разработки и реализации языков программирования / В.А. Кундиус. - М.: КноРус, 2013. - 184 c.
  7. Окулов, С.М. Основы программирования, перераб / С.М. Окулов. - М.: Бином, 2015. - 336 c.
  8. Семакин, И.Г. Основы алгоритмизации и программирования: Учебник для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков . - М.: ИЦ Академия, 2013. - 304 c.
  9. Черпаков, И.В. Основы программирования: Учебник и практикум для СПО / И.В. Черпаков. - Люберцы: Юрайт, 2016. - 219 c.
  10. Юдин, Д.Б. Задачи и методы линейного программирования: Математические основы и практические задачи / Д.Б. Юдин, Е.Г. Гольштейн. - М.: КД Либроком.
  11. Кетков Ю. Л., Шапошников Д. Е. Персональный компьютер: Школьная энциклопедия. — М.: Большая Российская Энциклопедия, 1998. — 440 с.
  12. Кирюхин В. М., Лапунов А. В., Окулов С. М. Задачи по информатике. Международные олимпиады. — М.: ABF, 1996. — 272 с.