программирование на языке бейсик

 

УРОК 3. Представление целых чисел в компьютере

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

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

Бит, как уже указывалось, может принимать значение ноль и единица. Число 7 в двоичной системе счисления представляется как 111b, то есть 1х22+ 1х21 + 1х20= 1х4 + 1х2 + 1х1. Для представления числа 7 требуется три бита.

На самом деле число бит, выделенных для числа, имеет не переменную, а фиксированную длину. Для представления чисел используется 8 бит, 16 и т.д. бит. 8 бит называется байтом. Место, выделяемое для хранения числа, кратно байту. Максимальное число, которое можно представить в байте, в двоичном виде равно 1111 1111b = 1х27 + 1х26 + 1х25 + 1х24 + 1х23 + 1х22 + 1х21 + 1х20 = 255 или с нулем - 256 значений. Для представления десятичного числа необходимо использовать 4 бита на один разряд, тогда максимальное число, которое можно представить в байте (8бит = 2х4 или две цифры) равно 9х101 + 9х100 = 99 или всего 100 значений вместе с нулем.

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

Положительные числа хранятся в форме естественной для понимания, то есть число 4 будет представлено как 0000 0000 0000 0100b, где первый (0) бит обозначает знак (+), а остальные предназначены для значения самого числа.

Отрицательные значения могут храниться в двух видах, либо со знаковым представлением (прямой код): для 4 это будет 1000 0000 0000 0100b, где первый бит (1) обозначает знак числа (-), а далее находится значение по модулю 4. Либо, что чаще, с дополнением до двух (дополнительный код), где значение –4 будет представлено в виде 1111 1111 1111 1100b, в котором первый бит определяет знак числа, а само значение минус четыре имеет инвертированное представление, при котором вместо 1 пишется 0, а вместо 0 – 1. Например, число –1 представлено как 1111 1111 1111 1111b, число –2 как 1111 1111 1111 1110b. То есть для того, чтобы представить число –4, нужно вычесть из значения числа единицу, получим –3. Число 3 можно представить как 0000 0000 0000 0011b и далее инвертировав 0 и 1, получим 1111 1111 1111 1100b.

Это представление удобно для сложения двоичных чисел. Например, если сложить –4 и +5, то сумму можно получить побитным сложением:

   1111 1111 1111 1100b

+0000 0000 0000 0101b

   0000 0000 0000 0001b

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

В некоторых языках программирования могут существовать переменные, которые содержат только неотрицательные значения. Понятно, что в таких переменных знак числа отсутствует, но количество значений, которые они могут принимать, такое же, как и у знаковых переменных. Проведем подсчет. Если под переменную выделяется 1 байт или 8 бита, то знаковая переменная может иметь 27-1= 127 положительных и 27=128 отрицательных значений. Положительных на одно значение меньше, так как одно значение используется под ноль. Всего 127 (положительных) + 1 (нулевое) + 128 (отрицательных) = 256 значений. Для беззнаковой переменной используется 28 = 256 значений от 0 до 255 или 1 (нулевое) + 255 (положительных) = 256.

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

Вычитание двоичных чисел также проводится столбиком, как это делается для десятичных чисел. Попробуем вычесть 15 – 5 = 10:

   0000 0000 0000 1111b

- 0000 0000 0000 0101b

  0000 0000 0000 1010b

При этой операции, если нет признака переноса и обе цифры равны 1 или 0, то пишем 0, 1 – 0 = 1, 0 – 1 = 1. Приведем еще несколько примеров, где сначала запишем операцию для десятичных значений, а ниже для двоичных:

5 – 10 = -5

  0000 0000 0000 0101b

- 0000 0000 0000 1010b

  1111 1111 1111 1011b

Вычитаем слева направо. Сначала 1 – 0 = 1, затем 0 – 1 = 1 и бит переноса = 1, 1 – 0 – бит переноса равный единице = 0, 0 – 1 = 1 и бит переноса равен 1, далее 0 – 0 – бит переноса = 1 и один бит переноса и так далее.

5 – (-5) = 10

0000 0000 0000 0101b

-  1111 1111 1111 1011b

   0000 0000 0000 1010b

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

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

Операция умножения проводится так же, как и для десятичных чисел, которую лучше продемонстрировать на примере (5 х 5 = 25):

0000 0101b

х 0000 0101b

      00000101

      00000101

      00011001b

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

Операция деления проводится также, как и для десятичных чисел, что покажем на примере (25:5=5):


 11001
101
-101
  101
101
    101
    101
        0

 

При операции умножения и деления вручную для отрицательных чисел, нужно их перевести в положительные значения, перемножить и присвоить знак минус, если один из операторов отрицательный, а другой положительный. При делении, когда результат является не целым числом (7:3=2,33(3)), нужно проводить столько операций, сколько необходимо иметь значений после запятой.

Иногда при арифметических операциях может получиться значение, которое не поместится в выделенную для переменную область памяти. Например, если для однобайтовой переменной, у которой приемлемые значения лежат в пределах от 127 до –128 провести операции 100 + 88 = 188, -111-55=-166, 22х10=220, то произойдет переполнение, так как полученные значения находятся вне пределов допустимости. Результат программы может быть различным. В некоторых случаях на экран будет выдано сообщение, что результат вызвал ошибку и программа прекратит свою работу. В других, при отключенном параметре проверки допустимости значений переменных, в ячейку может поместиться некое значение, которое не является результатом операции, например, не 188, а 61, то есть значение меньшее на 127 и программа будет продолжать свою работу. Поэтому при отладке включают параметр проверки допустимости значений, при этом программа будет работать медленней, так как происходит проверка на допустимость, а после отладки программы переключатель выключают.

В конце урока суммируем пределы представления чисел:

- короткое целое с положительными значениями определяется 16 битами, то есть можно хранить значение от 0 до 2 16 -1= 65535,

- короткое целое с положительными и отрицательными значениями использует один бит для знака, остальные для данных и может принимать значения в диапазоне от -32 768 до +32 767,

- длинное целое число определяется размером в двойное слово (32 бита) и для положительных может принимать значение от 0 до 4 294 967 296, а в формате для отрицательных и положительных чисел диапазон от -2 147 483 648 до +2 147 483 647.

При определении объемов памяти в компьютере используется понятие килобайт и мегабайт. 1 килобайт равен 1024 байт, а 1 мегабайт равен 1024 килобайт. При этом используется переводной коэффициент не 1 000, а 1024, который равен 210 и пришел из двоичной системы.

В некоторых случаях, например, у производителей жестких дисков, принято 1Мб принимать 1 000 000 байт, что на 4, 9% меньше, чем в стандартном понимании. Как правило, в литературе по компьютеру встречается название мегабайты, однако в редких случаях, когда описывается скорость обмена данными может встретиться другое название: мегабит или килобит. Один мегабит равен 1 048 576 бит или 1024 килобит, 1 килобит равен 1024 бит, то есть цифровое соотношение такое же, как и у байта. Так как 1 байт = 8 битам, то один мегабайт будет содержать 8 мегабит.

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


НЕ (NOT)



И (AND)

0

1


ИЛИ (OR)

0

1


Исключающее ИЛИ (XOR)

0

1

0

1


0

0

0


0

0

1


0

1

0

1

0


1

0

1


1

1

1


1

0

0

 

Задачи.

1. Представить числа в двоичном виде: а) 1, б) 10, в) 125, г) –3, д) -259

2. Каким числам в десятичной системе счисления соответствуют следующие числа: а) 0000 0000 0000 0101b б) 0000 1000 0000 0101b в) 0000 0000 1111 1001b г) 1111 1111 1011 1100b, д) 1111 0000 1111 1100b, е) 1111 1111 1111 1111b

3. выполнить операции в двоичном представлении: а) 2+3=5, б) 3-5=-2, в) 10 – (-12) = 22, г) 2х7=28 д) 6х7=42 е) 36:6=6 ж) 16:4=4

(переход на следующую страницу)

 

О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О











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

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


 
 
 
Яндекс.Метрика


Каталог@MAIL.RU - каталог ресурсов интернет