Переменные часть 1

Понятие битов и байтов:

Если представить память компьютера как огромный лист бумаги в клеточку, то вот отдельные клеточки будут битами. В каждом бите может быть значение равное либо 0 либо 1. Почему не может быть 2 , 3 , 4 ? Это связано с устройством работы процессора. Ниже я для понимания предлагаю посмотреть на рисунок простой микросхемы (ведь процессор это тоже микросхема, только выводов у него в несколько раз больше).

Микросхема

И так у нее, как вы можете заметить, с каждой стороны по 8 лапок. Каждая лапка олицетворяет бит. То есть на одну лапку можно подать электрический сигнал 1 или снять 0 . С другой стороны 8 лапок (бит) - это байт. И в зависимости от того в каком соотношении на лапках микросхемы располагаются электрические сигналы, кодируются различные цифры и буквы. Например текстовая информация кодируется так:

цифра 1 кодируется как 00110001

буква R кодируется как 01010010

Если вы посчитаете сколько возможных состояний может быть, то поймете что байт вмещает 256 состояний (от -128 до 127) и этого вполне хватает чтобы закодировать русские, латинские символы, числа от 0 до 9, а так же специальные символы(* ; . " и др.) . Конечно дальнейшее устройство микросхем мы разбирать не будем(тем более, что устройство именно этой микросхемы чуточку другое), все это я привел для того чтобы получить частичку фундаментальных знаний. И как для раздумий: все наверно слышали про азбуку Морзе, так вот там тоже только два состояния (- .) , но так же кодировали буквы, цифры и др. Знаю, что это нудно, но не переживайте, если что-то не поняли, просто примите что это так. На начале обучения языку, у вас вряд ли возникнет необходимость работы с такими маленькими величинами как биты, но с байтами будете сталкиваться постоянно.

Понятие переменных:

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

  • Имя не должно начинаться с цифры
  • Имя не должно иметь сходство со встроенными операторами или командами языка. То есть имя Dim создать нельзя.

Имя имеет свой определяемый тип. Пример:

Dim Alpha As Byte = 45

Здесь мы объявили переменную с именем Alpha и типом Byte. Слова Dim и As являются служебными операторами. Оператор Dim в связке с As , вы будете использовать практически в каждой программе. Dim буквально означает (ОБЪЯВИТЬ). Служебное слово As означает (КАК). Это как бы помощник для Dim и для вас, чтобы лучше воспринимать исходный текст программы. Справа после знака равно лежит значение переменной. Если буквально прочитать, то получится следующее:

Dim Alpha As Byte = 45

Объявить переменную Alpha как байтовую и присвоить ей значение 45

Или похожими словами:

Объявляем переменную Alpha с типом Байт и значением 45

Или так:

Выделить память в размере 1 байт для переменной Alpha и занести туда значение 45

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

Dim Alpha As Byte = 45
Dim alpha As Byte = 45
Dim alPha As Byte = 45 

В примере выше мы объявили переменную и сразу присвоили ей значение, но это является необязательным, используя оператор Dim. То есть мы могли записать так:

Dim Alpha As Byte

А потом в любом месте программы присвоить ей значение, только там уже не нужно объявления типа и операторов Dim и As

Alpha = 45

При объявления стандартных переменных, компилятор FreeBasic автоматически выделяет под них память и заносит туда 0 . У многих других языков программирования в переменных при объявлении может лежать все что угодно, или как говорят содержит мусор! Переменная объявляется только один раз, а дальше просто используется ее имя для присваивания и получения значений. Пример:

Dim Beta As Integer
Beta = 10000
Print Beta
Sleep

Вот мы и написали уже первую работающую, хоть и бесполезную программу, которую легко можно компилировать. Разберем ее по косточкам:

  • Объявляем переменную Beta с типом Integer (integer вмещает 4 байта на 32-bit системе)
  • Присвоили переменной Beta значение 10000
  • Командой Print запустили консоль и вывели туда значение переменной Beta
  • Остановили выполнение программы командой , до нажатия любой клавиши.

Скриншот примера

 

Внимание! Язык FreeBasic любое кол-во пробелов между операторами и переменными и т. п. воспринимает как один пробел:

Dim     value  As      Short
Dim value As Short

Записи эквивалентны!

Теперь поговорим о типах переменных. Как вы могли прочитать выше Byte  вмещает 256 состояний, или если проще числа от -128 до 127. То есть число 128 в него уже не войдет, произойдет переполнение. Но переполнение в программировании не похоже на переполнение стакана с чаем. Здесь действует другое правило:

Dim A As Byte =127 
A=A+1
Print A
Sleep ' результат будет -128
Dim A As Byte =127 
A=A+2
Print A
Sleep ' результат будет -127
Dim A As Byte =127 
A=A+3
Print A
Sleep ' результат будет -126

То есть для переменной при переполнении как бы получается ходьба по кругу. А что делать когда нужно чтобы в переменной помещалось число больше 127 ? Правильно, применить другой тип, который будет вмещать больше чем тип Byte. Давайте посмотрим на основные типы данных для переменных в таблице:

Тип Размер(в битах) Формат Мин. значение Макс Значение
BYTE 8 Целое число со знаком -128 +127
UBYTE 8 Целое число без знака 0 +255
SHORT 16 Целое число со знаком -32768 +32767
USHORT 16 Целое число без знака 0 65535
INTEGER 32/64 [*] Целое число со знаком [*]32bit: -2147483648, 64bit: -9223372036854775808 [*]32bit: +2147483647, 64bit: +9223372036854775807
UINTEGER 32/64 [*] Целое число без знака 0 [*]32bit: +4294967295, 64bit: +18446744073709551615
LONG 32 Целое число со знаком -2147483648 +2147483647
ULONG 32 Целое число без знака 0 4294967395
LONGINT 64 Целое число со знаком -9223372036854775808 9223372036854775808
ULONGINT 64 Целое число без знака 0 +18446744073709551615
SINGLE 32 С плавающей точкой +/-2.802597 E-45 +/-3.402823 E+38
DOUBLE 64 С плавающей точкой +/-4.490656458412465 E-324 +/-1.797693134862310 E+308
[*] Integer и UInteger типы данных различаются в зависимости от платформы и зависят от размера указателей.


В этой таблице нет строковых типов, но в отдельной статье мы так же рассмотрим их.

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

И закончив первое знакомство с переменными, хочется обратить ваше внимание на то, что в FreeBasic есть оператор Var , способный объявлять переменные без их типов (точнее типы он определяет сам). Но при работе с ним, значение нужно заносить сразу!  Пример:

Var a=1111111
Var b=3.14

Всего доброго!

содержание | назад | вперед