Переменная типа word имеет размер

Обновлено: 03.07.2024

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

Адресация и выделение памяти

Для процессора вся память представляет собой последовательность однобайтовых ячеек, каждая из которых имеет свой адрес. Для того, чтобы оперировать большими числами, пары ячеек объединяют в слова, пары слов – в двойные слова, пары двойных слов – в учетверенные слова. Чаще всего в программах оперируют байтами, словами и двойными словами (в соответствии с одно-, двух- и четырехбайтовыми регистрами процессоров). Адресом слова и двойного слова является адрес их младшего байта.

Здесь используется доступ к переменной типа BYTE по указателю – структура BYTE PTR [EAX]. Немного позже мы увидим, как этот прием используется при написании программ.

Задания.

Попробуйте записать по адресу переменной а, хранящемуся в регистре ЕАХ, число 260. Какой ответ вы получили? Почему? Задайте переменную b типа WORD и переменную c типа DWORD. Используя косвенную адресацию, запишите в эти переменные числа 1023 и 70000, соответственно. Поместите в переменную с число 70000, используя указатель типа BYTE:

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

На листинге 2 представлена программа, иллюстрирующая способы доступа к переменным по указателям. Наберите эту программу. Разберитесь с комментариями. Попробуйте поменять элементы массива. Попробуйте выводить результаты в шестнадцатеричной системе (вместо %u в строке формата функции printf() используйте %x).

Доступ к переменной по указателю используется и в языках высокого уровня (очень часто – при создании динамических массивов).

Указатель – это переменная, которая содержит адрес другой переменной (говорят, что указатель указывает на переменную того типа, адрес которой он содержит). Существует одноместная (унарная, т.е. для одного операнда) операция взятия адреса переменной & (амперсанд, как в названии мультфильма Tom&Jerry). Если имеем объявление int a, то можно определить адрес этой переменной: &a. Если Pa – указатель, который будет указывать на переменную типа int, то можно записать: Pa=&a. Существует унарная операция * (она называется операцией разыменования), которая действует на переменную, содержащую адрес объекта, т.е. на указатель. При этом извлекается содержимое переменной, адрес которой находится в указателе. Если Pa=&a, то, воздействуя на обе части операцией * получим (по определению этой операции): *Pa=a. Исходя из этого, указатель объявляется так:

Это и есть правило объявления указателя: указатель на переменную какого-то типа – это такая переменная, при воздействии на которую операцией разыменования получаем значение переменной того же типа. На листинге 3 приведен пример использования указателя в языке Си.

На листинге 4 представлена программа, позволяющая получать адреса элементов массивов разных типов средствами Cи. Обратите внимание на значения соседних адресов элементов массива.

Один из наиболее часто встречающихся случаев – использование указателей для динамического выделения памяти при создании массивов (листинг 5).

Задание. Выведите на экран адреса элементов массива, созданного в программе, показанной на листинге 5. Попробуйте создать динамический массив типа double, заполнить его, вывести на печать элементы массива и их адреса.

Арифметические операции над целыми числами

Сложение и вычитание целых чисел

Рассмотрим 3 основные команды сложения. Команда INC осуществляет инкремент, т.е. увеличение содержимого операнда на 1, например, INC EAX. Команда INC устанавливает флаги OF, SF, ZF, AF, PF в зависимости от результатов сложения. Команда ADD осуществляет сложение двух операндов. Результат пишется в первый операнд (приемник). Первый операнд может быть регистром или переменной. Второй операнд – регистром, переменной или числом. Невозможно, однако, осуществлять операцию сложения одновременно над двумя переменными. Команда действует на флаги CF, OF, SF, ZF, AF, PF. Её можно использовать для знаковых и для беззнаковых чисел. Команда ADC осуществляет сложение двух операндов подобно команде ADD и флага (бита) переноса. С её помощью можно осуществлять сложение чисел, размер которых превышает 32 бита или изначально длина операндов превышает 32 бита.

Умножение целых чисел

В отличие от сложения и вычитания умножение чувствительно к знаку числа, поэтому существует две команды умножения: MUL – для умножения беззнаковых чисел, IMUL – для умножения чисел со знаком. Единственным оператором команды MUL может быть регистр или переменная. Здесь важен размер этого операнда (источника).

Если операнд однобайтовый, то он будет умножаться на AL, соответственно, результат будет помещен в регистр AX независимо от того, превосходит он один байт или нет. Если результат не превышает 1 байт, то флаги OF и CF будут равны 0, в противном случае – 1. Если операнд двухбайтовый, то он будет умножаться на AX, и результат будет помещен в пару регистров DX:AX (а не в EAX, как могло бы показаться логичным). Соответственно, если результат поместится целиком в AX, т.е. содержимое DX будет равно 0, то нулю будут равны и флаги CF и OF. Наконец, если оператор-источник будет иметь длину четыре байта, то он будет умножаться на EAX, а результат должен быть помещен в пару регистров EDX:EAX. Если содержимое EDX после умножения окажется равным нулю, то нулевое значение будет и у флагов CF и OF.

Команда IMUL имеет 3 различных формата. Первый формат аналогичен команде MUL. Остановимся на двух других форматах.

operand1 должен быть регистр, operand2 может быть числом, регистром или переменной. В результате выполнения умножения (operand1 умножается на operand2, и результат помещается в operand1) может получиться число, не помещающееся в приемнике. В этом случае флаги CF и AF будут равны 1 (0 в противном случае).

В данном случае operand2 (регистр или переменная) умножается на operand3 (число) и результат заносится в operand1 (регистр). Если при умножении возникнет переполнение, т.е. результат не поместится в приемник, то будут установлены флаги CF и OF. Применение команд умножения приведено на листинге 8.

Листинг 8. Применение команд умножения

Деление целых чисел

Деление беззнаковых чисел осуществляется с помощью команды DIV. Команда имеет только один операнд – это делитель. Делитель может быть регистром или ячейкой памяти. В зависимости от размера делителя выбирается и делимое.

Делитель имеет размер 1 байт. В этом случае делимое помещается в регистре AX. Результат деления (частное) содержится в регистре AL, в регистре AH будет остаток от деления. Делитель имеет размер 2 байта. В этом случае делимое помещается в паре регистров DX:AX. Результат деления (частное) содержится в регистре AX, в регистре DX будет остаток от деления. Делитель имеет размер 4 байта. В этом случае делимое помещается в паре регистров EDX:EAX. Результат деления (частное) содержится в регистре EAX, в регистре EDX будет остаток от деления.

Команда знакового деления IDIV полностью аналогична команде DIV. Существенно, что для команд деления значения флагов арифметических операций не определены. В результате деления может возникнуть либо переполнение, либо деление на 0. Обработку исключения должна обеспечить операционная система.

Сначала приводит A и B , к указанному типу, а потом вычисляет результат A+B .

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

Спецификаторы памяти:
(указываются перед типом)

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

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

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

Объявление глобальной переменной, которая определена во внешнем файле.

Объявление локальной переменной, значение которой требуется хранить в регистрах процессора, а не в ОЗУ, для обеспечения ускоренного доступа.

Значения некоторых констант:

Ложь, используются вместо 0
Истина, используется вместо 1

Низкий уровень
Высокий уровень

Конфигурация вывода как вход
Конфигурация вывода как выход
Конфигурация вывода как вход с подтяжкой

Передача младшим битом вперёд
Передача старшим битом вперёд

Тактовая частота Arduino в Гц

Число Пи
Половина числа Пи
Два числа Пи
Число Эйлера

Префиксы:

Запись числа в 2ой системе ( 0b 10101)

Запись числа в 2ой системе ( B 10101)

Запись числа в 8ой системе ( 0 12345)

Запись числа в 16ой системе ( 0x 1234A)

Модификаторы:

Число типа long (12345 L )

Число типа long lond (12345 LL )

Число беззнакового типа (12345 U )

Комбинация модификаторов (12345 UL )

Показатель экспоненты (3 E -5 = 3•10-5)

Переменные, массивы, объекты, указатели, ссылки, . :

Это указание имени и типа переменной.
int A; // объявление переменной А

Это выделение памяти под переменную.
A =1; // определение ранее объявленной A

Действуют постоянно, в любом месте кода.

Создаются внутри функций, циклов и т.д.
удаляются из памяти при выходе из них.

Указывается в одинарных кавычках.
char A=' Z '; // присвоение символа «Z»

Указывается в двойных кавычках.
String A ; // присвоение строки «XY»

Это переменная с указанием класса, вместо типа, через объект можно обращаться к методам класса

Ссылка, это альтернативное имя переменной, она возвращает значение переменной, на которую ссылается.

int A=5; // создана переменная A = 5
int & C=A; // создана ссылка C на переменную A
A++; C++; // в результате A=7 и C=7
// Ссылку нельзя переопределить: &C=Z;

Указатель, это переменная, значением которой является адрес.

int * Y1=&A; // указателю Y1, передан адрес переменной A
int ( * Y2)(int)=F; // указателю Y2, передан адрес функции F
B=Y1; // получаем адрес переменной A из указателя Y1
B= * Y1; // получаем значение A разыменовывая указатель
// Указатель можно переопределять: Y1=&Z;

Создание альтернативного имени для типа

typedef bool dbl; // создаём свой тип «dbl», как тип bool
dbl A=1; // создаём переменную A типа bool

Это переменная состоящая из нескольких однотипных элементов, доступ к значениям которых осуществляется по их индексу.

int A[5]; // объявлен массив A из 5 элементов типа int
int A[2]=; // объявлен и определён массив A из 2 эл-тов
char A[ ]="Hi"; // создана строка A, как массив символов

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

К простым типам относятся:

Все эти типы, кроме вещественных, относятся к порядковым типам.

Порядковые типы делятся на стандартные и пользовательские (перечисляемые, интервальные).

Прядковый
Пользовательский
Символьный
Простые типы данных
Целый
Интервальный
Перечисляемый
Вещественный
Стандартный

Порядковые типы характеризуется следующими свойствами:

Термин целый (или целочисленный) употребляется в обычном смысле.

Значениями целого типа являются элементы подмножества целых чисел, границы которого зависят от реализации языка. Константы с именами MAXINT и MAXLongINT хранят значение наибольшего целого соответственного типа Integer и Longint.

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

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

Над целочисленными значениями в Паскале определены 5 основных операций, результатом которых является также целое число. Этими операциями являются: сложение (+), вычитание (-), умножение (*), целочисленное деление ( DIV ) и остаток от целочисленного деления ( MOD ) .

К целым величинам можно также применять операции отношения. Результат этих операций имеет логический тип.

НАПРИМЕР, результатом сравнения 3 < 8 будет значение true .

Кроме того, к целым величинам можно применять поразрядные операции and, or, xor и not . При выполнении этих операций каждая величина представляется как совокупность двоичных разрядов. Действие выполняется над каждой парой соответствующих разрядов операндов: первый разряд с первым, второй - со вторым и т. д .

НАПРИМЕР, результатом операции 3 and 2 будет 2.

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

НАПРИМЕР, результатом операции 12 shr 2 будет значение 3, поскольку двоичное представление числа 12 - 11002. Выполнив операцию 12 shl 1, т. е. сдвинув это число влево на 1 разряд, получим 24. Освободившиеся при сдвиге влево разряды заполняются нулями, а при сдвиге вправо - знаковым разрядом.

В языке Паскаль имеется две константы логического типа: true (истина) и false (ложь). Поэтому множество возможных значений переменных типа Boolean, ByteBool, WordBool, LongBool (логических переменных) состоит из двух значений. Этот тип определен так, что false < true ( упорядоченность ) , причем эти логические значения имеют порядковые номера 0 и 1 соответственно.

При внутреннем представлении переменные типа переменных типа Boolean, ByteBool занимают 1 байт памяти; типа переменных типа WordBool - 2 байта, типа LongBool - 4 байта. Переменные типа ByteBool, WordBool, LongBool введены только для того, чтобы обеспечить совместимость Turbo Pascal с другими языками программирования и средой Windows.

Над данными логического типа могут выполняться следующие операции:

Литерный тип обозначается именем char (от слова character - символ, знак).

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

Хотя на Паскале не фиксируется конкретное множество символов, но каждой отдельной версии языка Паскаль это множество должно отвечать следующим требованиям:

Элементы множества типа char считаются пронумерованными начиная с нуля. Переменные этого типа занимают 1 байт памяти.

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

Если апостроф сам принадлежит множеству значений типа char , то апостроф, являющийся значением константы, записывается дважды ("").

Предшествующее или следующее значение по отношению к данному зависит от реализации множества char и способа его упорядочения.

В Турбо Паскале в качестве значения типа char используется один символ кода ASCII. Для большинства символов существует соответствующая клавиша. Для управляющих символов ASCII используется два способа записи:

с использованием знака ^ , предшествующего символу.

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

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

НАПРИМЕР, 'A'<'B', так как ASCII -код символа 'A' равен 65, а ASCII -код символа 'B' равен 66.

Замечание. Существует функция sizeof(x), которая позволяет определить число байтов, занимаемое определенной переменой типа; x - наименование типа или имя переменной. Используя эту функцию, можно определить объем памяти, занимаемой данными стандартного типа или требуемой для структурированных типов данных.

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

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

ПРИМЕР. Type Season=(Spring, Summer, Autumn, Winter);

WeekDay=(Mon, Tue, Wed, Thu, Fri, Sat, Sun);

var Yesterday, Today, Tomorrow: WeekDay;

Описание типа и переменных можно объединить.

В рамках блока, где объявлен перечисляемый тип идентификаторы всех элементов перечисляемого типа интерпретируются как константы.

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

Константы предопределенных типов не могут быть значениями перечисляемого типа.

Объединение констант по какому-нибудь признаку назначаемого программистом. Переменные описанного типа могут принимать значение любой из этих констант.

ПРИМЕР. Today : =Mon

Так как перечисляемые типы являются порядковыми, то перечислением своих элементов он определяют упорядоченные наборы констант. Упорядочение констант в типе выполняется в соответствии с последовательностью, в которой перечисляются идентификаторы. Порядковый номер константы перечисляемого типа определяется ее позицией в списке идентификаторов при объявлении. Первая константа в списке имеет порядковый номер 0, вторая - номер 1 и т. д.

Интервальный тип данных – это подмножество уже определенного или стандартного скалярного типа (кроме real ). Поэтому в литературе можно встретить другие название этого типа, например, ограниченный тип, отрезочный тип, тип - диапазон.

Интервальный тип представляет собой диапазон (интервал) значений какого-либо порядкового типа, называемого базовым. При описании интервального типа указывается наименьшее и наибольшее значение диапазона значений, допустимых для этого типа. Минимальное и максимальное значение интервала разделяется знаком ".." (две точки).

ПРИМЕР. 0..500; -128..127; 'A'..'Z'; Mon..Fri

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

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

ПРИМЕР. Пусть дано описание

var Year: 1980..1985;

Тогда допустимыми являются присваивания:

Day:=Month; ( и выполнимым )

Day:=Year; ( и невыполнимом )

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

Областью значений типа real является определяемое реализацией языка подмножество всех действительных чисел. Это множество не является упорядоченным и потому к значениям этого типа не применимы функции succ и pred . Вещественные числа нельзя использовать в качестве индексов, счетчиков в for , селектора в case .

Особенность типа real связана со следующими обстоятельствами.

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

НАПРИМЕР, число 0,087 представляется в виде 0,87 x10 -1

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

Для хранения переменных типа Real компилятор Турбо Паскаля выделяет 6 байтов в ОЗУ (1 бит для знака, 39 бит для мантиссы и 8 бит для порядка). Это позволяет задавать вещественные числа (по абсолютной величине) в пределах от 2.9*10 -39 до 1.7*10 38 .

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

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

byte

Первый тип переменных, занимает 1 байт памяти и может принимать целые значения от 0 до 255. Им хорошо описывать номера пинов и вообще любые переменные, значения которых находятся в данных пределах. Преимущества- занимает мало места, недостатки- слишком малый диапазон значений.

boolean

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

char

Третий тип, занимает 1 байт на знак, предназначен для написания текста в нормальном виде или посредством ASCII- кодов. Принимает значения от -128 до 127.

Таблица ASCII- кодов.

unsigned char

Четвертый тип, это копия типа byte и в программировании предпочитают использовать именно тип byte. unsigned char используется крайне редко.

integer

Пятый тип, записывается как int, может принимать целые значения от -32768 до 32768. Размер integer-2 байта (кроме ARDUINO DUE, в нем INT занимает уже 4 байта но значения принимает от -2147483648 до 2147483647 ). Занимает мало места но диапазон гораздо выше чем у переменных типа byte.

В нормальном виде тип integer отображается в десятичном виде, но можно отображать и в бинарном, восьмеричном, шестнадцатиричном коде.

101 -десятиричный код, значение равно 101.

B101 -двоичный(бинарный) код, значение равно 5. Перед значением ставится буква B.

0101 -восьмеричный код, значение равно 65 ((1 * 8^2) + (0 * 8^1) + 1). Перед значением ставится 0 (ноль).

0x101 -шестнадцатиричный код, значение равно 257 ((1 * 16^2) + (0 * 16^1) + 1). Перед значением ставится 0x.

Кроме того константы типа integer можно преобразовывать в другие типы, если переменная не входит в диапазон integer:

unsigned integer

Шестой тип, записывается как unsigned int, имеет размер 2 байта и принимает целые значения от 0 до 65535. В контроллере ARDUINO DUE занимает 4 байта и может принимать целые значения от 0 до 4294967295.

word

Седьмой тип, записывается так же, занимает 2 байта и принимает значения от 0 до 65535. Применяется редко, вместо него обычно используют unsigned integer.

long

Восьмой тип, записывается так же, занимает 4 байта, принимает целые значения от -2147483648 до 2147483647.

Записывается как long var = 120000; переменной var типа long присваивается значение 120000.

Может использоваться в константах для преобразования типа integer в тип long, для этого в конце числа нужно дописать L и например

unsigned long

Девятый тип, занимает как и long 4 байта но, в отличии от него, не может принимать отрицательные значения, хотя верхний предел выше в 2 раза. Принимает значения от 0 до 4294967295.

Записывается как unsigned long var = 120000; переменной var типа unsigned long присваивается значение 120000.

short

Десятый тип, занимает 2 байта, принимает целые значения от -32768 до 32767.

Записывается как short var = 12000; переменной var типа short присваивается значение 12000.

float

Одиннадцатый тип, занимает 4 байта, принимает значения с плавающей точкой в пределах от -3.4028235E+38 до 3.4028235E+38. Предпочтительно использовать тип double, вместо float, тем более что занимает он такой же размер- 4 байта, т.к. этот тип выкидывает странные штуки, и если разделить 8.0/4.0, то это вовсе не означает что результат будет равен 2.0. Максимальная точность ограничивается 6-7 разрядами цифр вне зависимости от положения запятой.

Записывается как float var = 3.14157; переменной var типа float присваивается значение 3.14157.

double

Двенадцатый тип, занимает 4 байта (на ARDUINO DUE занимает 8 байт), не имеет ограничений по точности в сравнении с float, принимает значения с плавающей точкой в пределах от -3.4028235E+38 до 3.4028235E+38.

Записывается как long var = 3.14157; переменной var типа long присваивается значение 3.14157.

string

Тринадцатый тип. Вообще то встречается 2 типа string- string array (текстовый массив) и String (текстовая переменная).

array

Четырнадцатый тип. Массив. Можно указывать размер массива в квадратных скобках. Счет начинается с 0, недостающим значениям присваивается null.

Можно не указывать разрядность массива, компилятор ARDUINO сам посчитает элементы и выставит правильный размер начиная с 0.

Область применения:

Где же можно применять переменные и где можно обойтись без них.

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

int n1=10000;

Когда вы будете писать программу вы каждый раз будете думать- а какой тип имеет переменная n1? Каждый раз придется искать в коде где она объявлена, это занимает время и поднимает нервы, в конце концов где нибудь закрадется ошибка, опять отлаживать и т.д. Поэтому гораздо проще было бы написать:

int intn1=10000;

Основные ошибки при работе с переменными:

  • неправильное присваивание переменным одного типа значений другого типа. Например:

int x=12;

  • Выход за пределы значений переменной. Например:

Читайте также: