Определение переменных в программе

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

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

Определение переменных имеет следующий формат:

[спецификатор класса памяти] спецификатор типа идентификатор [=начальное значение];

Идентификатор может быть записан с квадратными скобками, круглыми скобками или перед ним может быть один или несколько знаков *.

Спецификатор типа – это одно или несколько ключевых слов, определяющих тип переменной. Язык Си определяет стандартный набор основных типов данных (int, char, double). При определении переменных им можно присвоить начальное значение.

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

Четыре ключевых слова: auto, extern, register, static определяют класс памяти. Если ключевое слово, определяющее класс памяти, опущено, то класс памяти определяется по контексту.

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

16. Определение именованных констант. Спецификация типов.

Именованная константа – это имя, которому присваивается постоянное значение. Такая константа в отличие от значения переменной не может изменяться по мере выполнения программы. Именованная константа создается с использованием директивы препроцессора #define. Например, следующий оператор определяет именованную константу z как значение 50. #definez50. После того, как константа определена, можно использовать ее значение на протяжении всей программы, просто обращаясь к имени значения константы.

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

Базовые типы: целые: спецификация типов:

signed char – знаковый символьный;

signed int – знаковый целый;

signed short int – знаковый короткий целый;

signed long int – знаковый длинный целый;

unsigned char- беззнаковый символьный;

unsigned int- беззнаковый целый;

unsigned short int – беззнаковый короткий целый;

unsigned long int – беззнаковый длинный целый.

Базовые типы: плавающие: спецификация типов:

float – плавающий одинарной точности;

double – плавающий двойной точности;

long float – длинный плавающий одинарной точности;

long double – длинный плавающий двойной точности.

Базовые типы: прочие: спецификация типов:

Типы char, int,short,longимеют две формы – знаковую (signed) и беззнаковую (unsigned). В совокупности они образуют целый тип. Перечислимый тип также служит для представления целых значений, однако переменная перечислимого типа может принимать значения только из набора, заданного в ее объявлении. Спецификации типов float и double относятся к плавающему типу.

Что такое переменная в программировании.

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

Приведение значения выражения к типу void явно указывает на то, что это значение не используется. Нельзя объявить переменную типа void.

При записи спецификаций целого и плавающего типов допустимы сокращения. Например, в целых типах ключевое слово signed может быть опущено. Если ключевое слово unsigned отсутствует в записи спецификации типа short, int, long, то тип целого будет знаковым, даже если опущено ключевое слово signed.

Спецификации типов и их сокращения:

Спецификация типа Сокращение

signed char char

signed int signed, int

signed short int short, signed short

signed long int long, signed long

unsigned int unsigned

unsigned short int unsigned short

unsigned long int unsigned long

long float double

long double double

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

Тип Представление в памяти Область значений

сhar1 байт от -128 до 127

intзависит от реализации

short2 байта от -32768 до 32767

long4 байта от 2.147.483.648 до 2.147.483.647

unsignedchar1 байт от 0 до 255

unsignedзависит от реализации

unsignedshort2 байта от 0 до 65535

unsigned long 4 байта от 0 до 4.24.967.295

double 8 байтов

Тип char может использоваться для хранения буквы, цифры или другого символа из множества представимых символов. Значением объекта типа char является код, соответствующий данному символу. Тип char интерпретируется как однобайтовое целое с областью значений от -128 до 127. Тип unsigned char может содержать значения в интервале от 0 дло 255. В частности, буквы русского алфавита имеют коды, соответствующие типу unsigned char.

Источник: studfile.net

Java Core для самых маленьких. Часть 3. Переменные

В предыдущей статье мы говорили о типах данных, а теперь поговорим о вытекающей из этого теме, о переменных.

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

На скриншоте выше продемонстрирован пример создания переменных.

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

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

abc и ABC будут разными именами. Еще можно встретить переменные, имя которых начинается с символа валюты доллара: $
Например: double $pi = 3.14; Такое можно увидеть в авто-генерируемых участках кода. Живые люди, насколько мне известно, так не пишут.

Читайте также:
Кумир программа для школьников как пользоваться роботом

Давайте сразу научимся давать имена переменным правильно. Существует документ Java Code Conventions. В нем указаны правила к написанию кода на Java. Нужно это для того, что бы Java код в разных проектах был написан в едином стиле. Таким образом, новоприбывший на проект программист не будет отвлекаться на новый стиль кода, ведь он будет оформлен так же, как и на других проектах.

Эти правила работают и при нейминге переменных.

Итак, переменные принято называть в lowerCamelCase стиле. Сейчас покажу как хорошо, а как плохо:

Как вы могли заметить, в примере, в имени переменной используется символ подчеркивания _ . На практике допускается использовать такой символ только для имен констант. Чем константа отличается от переменной? Переменная на то и переменная, что ее значение изменчиво и всегда можно присвоить другое:

Вот было значение 1998, а на следующей строке стало 2000. А вот с константой так не получится. Константа гарантирует, что ее значение не изменится на протяжении всего времени выполнения программы. Как создать константу? Очень просто:

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

Обратим внимание на имя константы. Когда мы даем имя константе, то должны делать это в стиле SCREAMING_SNAKE_CASE. Давайте исправим мой код:

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

Инициализация переменных

У всех переменных из моих примеров уже было присвоено начальное значение. Процесс присвоения начального значения называется инициализацией переменной. И не обязательно инициализировать переменную во время ее объявления. Java позволяет сделать это и позже.

Во-первых, можно объявлять переменные через запятую (если они одинакового типа):

При этом, смотрите, мы можем некоторые из них инициализировать прямо во время объявления. А теперь инициализируем оставшиеся:

Для инициализации переменных типа char я использовал цепочку присваиваний. Да, и так тоже можно. Хотя используется очень редко.
Если мы попытаемся провести какую-то операция с переменной, у которой нет значения, то получим ошибку.

Оператор присваивания

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

Литералы

Видели, в моих примерах выше, я писал значение переменной с типом long не просто 1998 а 1998L ? Сейчас расскажу, что это за L в конце.

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

Целочисленные литералы по умолчанию создаются в виде значения типа int , и это значение можно присваивать всем целочисленным типам данных без проблем, в случае, если это значение не выходит за пределы допустимых значений (в предыдущей статье мы говорили о диапазонах значений у разных типов данных). Но что делать, если мы хотим указать целое число, которое больше пределов числа типа int ? В этом случае есть возможность создать литерал типа long просто указав в конце символ L . Я мог и не писать 1998L , потому что число 1998 вполне помещается в диапазон значений типа данных int . А теперь, я вдруг захотел присвоить переменной типа long значение, скажем, в девять миллиардов. Число не маленькое и оно выходит за пределы максимального значения типа int .

Вот тут нам понадобится литерал типа long . При помощи символа L , в конце целочисленного значения, мы явно указывается, что это значение будет типа long , а следовательно и с большим диапазоном значений.

Так, что еще за символы подчеркивания в значении переменной? Это всего-навсего декор. С JDK 7 допустимо указывать знаки подчеркивания, для разбиения больших чисел на разряды, для удобства чтения.

В вышеописанных примерах были литералы для целочисленных десятичных значений. А еще мы можем присвоить целому числу литерал в виде восьмеричного значения. Для этого вам нужно добавить в самом начале значения 0. Но в таком случае, логично, что это значение не сможет содержать цифры 8 и 9, поскольку они выходят за пределы восьмеричной системы счисления.

Мало того, еще мы можем использовать литерал шестнадцатеричных значений. Такие значения обозначают с начальным 0x или 0X, а цифры в пределах от 10 до 15 заменяются символами ABCDEF английского алфавита.

С JDK 7 есть возможность указывать целочисленные литералы в двоичном виде. Для этого вначале значения нужно указать 0b или 0B и соответственно в значениях можно использовать только цифры 0 и 1. В реальности, вам навряд ли понадобятся литералы шестнадцатеричных, восьмеричного или двоичных значений. Однако, знать о них нужно.

Литералы дробных чисел

Литералы дробных чисел могут быть представлены в привычном для нас виде. Они состоят из целой и дробной части, которые разделены точкой. Например: 10.9; .

Но существует и экспоненциальная форма записи этих чисел в виде 2.34e12;

Где число после символа ‘e’ обозначает степень 10-ти. Простыми словами, мы записали 2 целых и 34 сотых умноженное на 10 в 12 степени.

По умолчанию литералы дробных чисел имеют тип double , если хотим создать литерал типа float , нужно указать символ f или F в конце значения. Как я уже сказал, по умолчанию, литерал будет типа double , однако мы все же можем указать это явно, дописав в конце значения символ d или D . Особого смысла это иметь, конечно же, не будет.

Как и в случае с целочисленными значениями, литералы с плавающей точкой поддерживают нижнее подчеркивание начиная с JDK 7.

Читайте также:
Программа которая улучшает качество видео на Айфон

Логические литералы

С логическими литералами все просто, они поддерживают только два логических значения true или false .

Символьные литералы

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

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

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

Не представляю, зачем кому-то может понадобиться выполнять арифметические операции над типом char , но знайте, Java это позволяет. Мало того, коды символов английского алфавита (и многих других), расположены в порядке возрастания. Например, символу a соответсвует код 97, символу b — код 98. На основе этого можно сортировать символы по алфавиту.

А вот если символ нельзя ввести непосредственно с клавиатуры, то для ввода таких символов используют ряд управляющих последовательностей. Например, символ переноса строки ‘n’. Существуют последовательности, которые существуют для ввода значений в восьмеричной и шестнадцатеричной форме. Например, мы захотели ввести букву tu катаканы смайлик: ツ. Берем и пишем:

В данной таблице вы можете посмотреть наиболее используемые последовательности символов:

Когда-то давно, я писал статью про экранирование символом. Настоятельно рекомендую прочитать, как дополнительный материал. Узнаете много интересного.

Строковый литерал

Можно заключить последовательность символов в двойные кавычки и получить так называемую строку.

Про строки будет отдельная статья, через одну если быть точным. Там нам будет о чем поговорить, а пока просто имейте ввиду что «» — это строковый литерал.

Динамическая инициализация

Пару слов о таком термине как динамическая инициализация. Ничего сложного, только звучит страшно.

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

Главное, чтобы тип данных выражения / инициализирующей переменной совпадал с типом данных целевой переменной.

Преобразование и приведение типов

Знаю, вы уже подустали, сделали массу перерывов и подходов. Обещаю, это последняя тема в этой статье.

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

Не так страшен черт, как его малюют. Все очень просто. Например, тип long достаточно велик чтобы поместить в себя тип int и прочие целочисленные типы данных которые меньше long .

На картинке выше, вы можете увидеть, какие типы данных вы можете преобразовать автоматически. Исходя из этого изображения, мы можем в переменную типа float поместить значение типа long . Звучит странно, давайте проверим:

Все работает. К сожалению, автоматическое преобразование не способно покрыть все потребности. Например если нужно тип int преобразовать в byte .

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

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

Подводим итоги

В этой статье мы поговорили о многих важных вещах. Узнали, как создавать переменные и константы в Java, и чем они отличаются. Узнали о способах инициализации переменных. Разобрались с тем, что такое литералы и какие они бывают. А так же выполнили преобразование и приведение типов данных.

Скажем спасибо Егору за предоставленный материал.

В следующей статье мы будем изучать массивы. Если переменная — это вагон, то поездом будет массив. В общем, будет опять многобукав и многомерные массивы. Всем спасибо за внимание. Учитесь старательно!

Источник: habr.com

1.3 – Знакомство с переменными в C++

В уроке 1.1 «Инструкции и структура программы на C++» вы узнали, что исходный код программы в основном состоит из инструкций, и что инструкции группируются в функции. Эти инструкции выполняют действия, которые (надеюсь) приводят к тому результату, для которого была разработана программа.

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

Ключевой момент

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

Программа может получать данные для работы разными способами: из файла или базы данных, по сети, от пользователя, вводящего данные с клавиатуры, или от программиста, вводящего данные непосредственно в исходный код самой программы. В программе «Hello world» в одном из предыдущих уроков текст « Hello world! » был вставлен непосредственно в исходный код программы, предоставляя данные для использования программой. Затем программа манипулирует этими данными, отправляя их на монитор для отображения.

Данные на компьютере обычно хранятся в формате, который эффективен для хранения или обработки (и, следовательно, не читается человеком). Таким образом, при компиляции программы «Hello World» текст « Hello world! » преобразуется в более эффективный формат для использования программой (двоичный, который мы обсудим на следующем уроке).

Объекты и переменные

У всех компьютеров есть память, называемая ОЗУ (сокращенно от оперативного запоминающего устройства, или RAM, «Random Access Memory», память с произвольным доступом), которая доступна для использования вашими программами. Вы можете думать о RAM как о последовательности почтовых ящиков, которые можно использовать для хранения данных во время работы программы. Отдельный фрагмент данных, хранящийся где-то в памяти, называется значением.

В некоторых старых языках программирования (например, Apple Basic) вы могли напрямую обращаться к этим почтовым ящикам (инструкция могла бы сказать что-то вроде «пойди получи значение, хранящееся в почтовом ящике с номером 7532»).

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

Читайте также:
Программа гетконтакт описание и отзывы

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

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

Примечание автора

В общем программировании термин объект обычно относится к переменной, структуре данных в памяти или функции. В C++ термин «объект» имеет более узкое определение, исключающее функции.

Создание экземпляра переменной

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

Вот пример определения переменной с именем x:

int x; // определяем переменную с именем x типа int

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

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

В качестве примера предположим, что переменная x создается в ячейке памяти 140. Всякий раз, когда программа затем использует переменную x , она обращается к значению в ячейке памяти 140. Созданный объект иногда также называют экземпляром.

Типы данных

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

В приведенном выше примере нашей переменной x был присвоен тип int , что означает, что переменная x будет представлять целочисленное (integer) значение. Целое число – это число, которое можно записать без дробной части, например 4, 27, 0, -2 или -12. Для краткости можно сказать, что x – целочисленная переменная.

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

Целые числа – это лишь один из многих типов, которые C++ поддерживает из коробки. Для иллюстрации вот еще один пример определения переменной с использованием типа данных double :

double width; // определяем переменную с именем width типа double

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

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

Определение нескольких переменных

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

int a; int b;

это то же, что и

int a, b;

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

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

int a, int b; // неправильно (ошибка компилятора) int a, b; // правильно

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

int a, double b; // неправильно (ошибка компилятора) int a; double b; // правильно (но не рекомендуется) // правильно и рекомендуется (легче читать) int a; double b;

Лучшая практика

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

Резюме

В C++ мы используем переменные для доступа к памяти. У переменных есть идентификатор, тип и значение (а также некоторые другие атрибуты, которые пока не имеют значения). Тип переменной используется для определения того, как следует интерпретировать значение в памяти.

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

Небольшой тест

Вопрос 1

Что такое данные?

Данные – это любая последовательность символов (цифр, букв и т.д.), которые можно интерпретировать как что-то.

Вопрос 2

Что такое значение?

Значение – это отдельный фрагмент данных, хранящийся в памяти.

Вопрос 3

Что такое переменная?

Переменная – это именованная область памяти.

Вопрос 4

Что такое идентификатор?

Идентификатор – это имя, по которому осуществляется доступ к переменной.

Вопрос 5

Тип сообщает программе, как интерпретировать значение в памяти.

Вопрос 6

Что такое целое число (integer)?

Целое число – это число, которое можно записать без дробной части.

Теги

Сохранить или поделиться

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.

Присоединяйтесь к нам во ВКонтакте!

  • Антенны и распространение радиоволн
  • Беспроводная связь
  • Высокочастотная техника
  • Волоконно-оптические линии связи (ВОЛС)
  • Измерительная техника
  • Исполнительные механизмы и драйверы
  • САПР
  • Спутниковая связь
  • Схемотехника
  • Телевидение
  • Цифровая электроника
  • Технологии и инструменты
  • Электронные компоненты
  • А что внутри?
  • Прочее (радиоэлектроника)
  • Алгоритмы и структуры данных
  • Базы данных
  • Веб-разработка
  • Мультимедиа (разработка ПО)
  • Нейронные сети
  • Паттерны проектирования
  • Связь
  • Системы сборки ПО
  • Языки программирования
  • Компьютерные сети
  • Операционные системы
  • Верстка
  • Системы контроля версий
  • История технологий
  • Мультимедиа
  • Новости телекома
  • Нормативная документация
  • Охрана труда
  • Полезные программы
  • Просто интересно
  • Экономика телекоммуникаций и электронной промышленности
  • Экономика и инвестиции
Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru