velikol.ru
1

СИСТЕМЫ СЧИСЛЕНИЯ


(Перевод чисел из одной системы счисления в другую)

Пример записи числа в десятичной позиционной системе счисления:

4 3 2 1 0 -1 -2 -3

38438.34510 = 3×104 + 8×103 +4×102 +3×101+8×100 +3×10-1 +4×10-2 +5×10-3

Справочная таблица

10 2 16 x 2x

0 0000 0 0 1

1 0001 1 1 2

2 0010 2 2 4

3 0011 3 3 8

4 0100 4 4 16

5 0101 5 5 32

6 0110 6 6 64

7 0111 7 7 128

8 1000 8 8 256

9 1001 9 9 512

10 1010 A 10 1024

11 1011 B 11 2048

12 1100 C 12 4096

13 1101 D 13 8192

14 1110 E 14 16384

15 1111 F 15 32768

16 10000 10 16 65536

17 10001 11 17 131072

18 10010 12 18 262144

19 10011 13 19 524288

20 10100 14 20 1048576

21 10101 15 21 2097152

22 10110 16 22 4194304

23 10111 17 23 8388608

24 11000 18 24 16777216

25 11001 19 25 33554432

26 11010 1A 26 67108864

27 11011 1B 27 134217728

28 11100 1C 28 268435456

29 11101 1D 29 536870912

30 11110 1E 30 1073741824

31 11111 1F 31 2147483648

32 100000 20 32 4294967296

Задачи


C = 45 ¸ 60; N – номер варианта (у каждого ученика свой)

  1. Число 3 ´ (N + C) + 1 перевести из десятичной формы записи в двоичную.

  2. Полученное в двоичном виде число перевести в шестнадцатеричную форму записи.

  3. Полученное шестнадцатеричное число перевести в десятичную форму записи.

  4. К числу в шестнадцатеричном виде прибавить 3F16, затем последовательно перевести в двоичную и в десятичную форму записи.
^

Примеры решения задач


1. Число 438 перевести из десятичной формы записи в двоичную


438 2

0 219 2

1 109 2

1 54 2

0 27 2

1 13 2

1 6 2

0 3 2

1 1


43810 = 1 1011 01102


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


8 7 6 5 4 3 2 1 0

1 1011 01102 = 1×28 + 1×27 + 0×26 + 1×25 + 1×24 + 0×23 + 1×22 + 1×21 + 0×20 =

= 28 + 27 + 25 + 24 + 22 + 21 = 256 + 128 + 32 + 16 + 4 + 2 = 43810


2. Полученное в двоичном виде число перевести в шестнадцатеричную форму записи.

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


1 1011 01102 = 1B616


3. Полученное шестнадцатеричное число перевести в десятичную форму записи.


2 1 0

1B616 = 1×162 + 11×161 + 6×160 = 256 + 176 + 6 = 43810


4. К числу в шестнадцатеричном виде прибавить 3F16, затем последовательно перевести в двоичную и в десятичную форму записи.



Каждую шестнадцатеричную цифру заменим соответствующей тетрадой (см. таблицу), таким образом получим двоичное число:



8 7 6 5 4 3 2 1 0

1F516 = 1 1111 01012 = 28 + 27 + 26 + 25 + 24 + 22 + 20 =

= 256 + 128 + 64 + 32 + 16 + 4 + 1 = 50110


Для сравнения, переведём из шестнадцатеричной системы в десятеричную:


2 1 0

1F516 = 1×162 + 15×161 + 5×160 = 256 + 240 + 5 = 50110

'*************************************************************************

'* k0_1_x10.bas Программа преобразования из заданной формы *

'* ------------ представления числа в десятичную *

'* *

'* Август 1995 г. Автор: Перчиц С.Н. *

'*************************************************************************

'

INPUT "Из какой системы счисления преобразовывать? m = "; m

INPUT "N = "; sn$

l = LEN(sn$)

n = 0


FOR I = 1 TO l

s$ = MID$(sn$, I, 1)

ks = ASC(s$)

IF ks < 65 THEN dn = VAL(s$) ELSE dn = ks - 55

n = n * m + dn

NEXT I


PRINT

PRINT sn$; " = "; n

PRINT


END


'*************************************************************************

'* K0_1_DX.BAS Программа преобразования из 10-чной формы *

'* ----------- представления числа в требуемую *

'* *

'* Апрель 2011 г. Автор: Перчиц С.Н. *

'*************************************************************************

'

Enter$ = CHR$(13)

kd0 = ASC("0")

kdb = ASC("A") - 10

PRINT Enter$

INPUT "В какую систему счисления преобразовывать? m = "; m

DO

PRINT Enter$

INPUT "N = "; n1

PRINT n1; "= ";

IF n1 < 0 THEN

n = 65536 + n1

ELSE

n = n1

END IF

b$ = ""

DO

n1 = n MOD m

IF n1 < 10 THEN b$ = CHR$(n1 + kd0) + b$ ELSE b$ = CHR$(n1 + kdb) + b$

IF n < m THEN EXIT DO

n = n \ m

LOOP

PRINT b$

PRINT Enter$; Enter$; "Повторить ?"

DO

w$ = INKEY$

LOOP WHILE w$ = ""

LOOP WHILE w$ <> CHR$(27)

END

^

ПРЕДСТАВЛЕНИЕ ЧИСЕЛ В ЭВМ

Задачи


C = 45 ¸ 60

  1. Записать машинные коды двух целых десятичных чисел с фиксированной точкой A = –3´(N+C)+1 и B=3´(C–N) в 16-ти разрядной сетке. В ответе использовать 2-ю и 16-ю системы счисления.

  2. Выполнить операцию сложения машинных кодов двух целых чисел A и B с фиксированной точкой в 16-ти разрядной сетке. В качестве ответа записать код результата (в 2-й и 16-й системах счисления) и десятичное число, соответствующее этому коду.

  3. Числа ±((3´(N+C)+1)+(N+1)´0.03125) записать в разрядной сетке слова (32 разряда) в форме числа с плавающей точкой (с учётом смещённого порядка)


Для IBM PC: (-1)S ´ 2E-127 ´ 1.F



S

E

F

31 30 23 22 0

Пример: 20.5937510 = 10100 + 0.10011 = 10100.10011

1.010010011´24 – после нормализации

S = 0; E = 127 + 4 = 131 = 10000011; F = 010010011

Тогда: 20.5937510 = 41A4C00016

Для IBM 360 и IBM 370: (-1)S ´ 16E-64 ´ 0.F


0 1 7 8 31

S

E

F

31 30 24 23 0

Пример: 20.5937510 = 10100 + 0.10011 = 10100.10011

0.0001010010011´162 – после нормализации

S = 0; E = 64 + 2 = 66 = 1000010; F = 0001010010011

Тогда: 20.5937510 = 4214980016
^

Примеры решения задач


C = 110; N = 6

  1. Записать машинные коды двух целых десятичных чисел с фиксированной точкой и в 16-ти разрядной сетке. В ответе использовать 2-ю и 16-ю системы счисления.


+34910 = 1 0101 11012 = 15D16

0000 0001 0101 1101 – прямой код

1111 1110 1010 0010 – обратный код

1111 1110 1010 0011 – дополнительный код

(дополнительный код = обратный код + 1)

Числа представляются в ЭВМ в дополнительном коде, так число –34910 будет представлено как:

1111 1110 1010 00112 или FEA316

Дополнительный код числа можно получить и иначе:

1000016 – 15D16 = FEA316




349 2

1 174 2

0 87 2

1 43 2

1 21 2

1 10 2

0 5 2

1 2 2

0 1


3
31210 = 1 0011 10002 = 13816

0000 0001 0011 1000– прямой код

Прямой и дополнительный код положительного числа выглядят одинаково, поэтому число +31210 будет представлено в ЭВМ как:

0000 0001 0011 10002 или 013816
12 2

0 156 2

0 78 2

0 39 2

1 19 2

1 9 2

1 4 2

0 2 2

0 1


  1. Выполнить операцию сложения машинных кодов двух целых чисел A и B с фиксированной точкой в 16-ти разрядной сетке. В качестве ответа записать код результата (в 2-й и 16-й системах счисления) и десятичное число, соответствующее этому коду.

FEA316 + 013816 = FFDB16 или 1111 1111 1101 10112

Для получения десятичного числа по его коду, поскольку получившееся число отрицательное (старший бит равен единице), сделаем обратное преобразование из дополнительного кода в прямой:

1111 1111 1101 1011 – дополнительный код

0
+
000 0000 0010 0100

1

0000 0000 0010 0101 – прямой код

0000 0000 0010 01012 = 2516 = 2×16 + 5 = 37. Таким образом, число соответствующее этому коду, равно –37. (Проверка: –349 + 312 = –37).

Здесь также прямой код числа можно получить иначе: 1000016 – FFDB16 = 2516

  1. Числа ±349.1875 записать в разрядной сетке слова (32 разряда) в форме числа с плавающей точкой (с учётом смещённого порядка)


34910 = 1 0101 11012

Переведём дробную часть числа (0.1875) в двоичную форму:

0
×
1875

2
0.187510 = 0.00112

Проверка:

-1 -2 -3 -4

0.00112 = 2-3 + 2-4 =


0
×
3750

2



0
×
7500

2

1
×
5000

2

1 0000


Т.е.:

349.187510 = 1 0101 1101.00112

1.0101 1101 0011´28 – после нормализации

S = 0; E = 127 + 8 = 135 = 1000 0111; F = 0101 1101 0011

Т.о. +349.187510 представлено как:

0100 0011 1010 1110 1001 1000 0000 00002 или 43AE980016

Отрицательное число –349.187510 представлено как (здесь S = 1, а E и F прежние):

1100 0011 1010 1110 1001 1000 0000 00002 или C3AE980016


'*************************************************************************

'* k0_1_i.bas К КОНТРОЛЬНОЙ РАБОТЕ N 1 (10 класс) *

'* ---------- *

'* Представление целых чисел в ЭВМ типа IBM PC *

'* *

'* Август 2009г. Автор: Перчиц С.Н. *

'*************************************************************************

DEFINT A-B, I

CLS

DIM bt(2)

DO

INPUT "Введите значение целой переменной -> ", a

adr = VARPTR(a)

PRINT "переменная a ="; a

PRINT "ее адрес ="; adr


FOR i = 1 TO 2

bt(i) = PEEK(adr + i - 1)

NEXT i


PRINT "Переменная записана в памяти как: ";

FOR i = 2 TO 1 STEP -1

IF bt(i) < 16 THEN PRINT HEX$(0);

PRINT HEX$(bt(i));

NEXT i

PRINT


PRINT "Повторить?"

DO

w$ = INKEY$

LOOP WHILE w$ = ""

LOOP WHILE w$ = CHR$(13)


'*************************************************************************

'* k0_1_f.bas К КОНТРОЛЬНОЙ РАБОТЕ N 1 (10 класс) *

'* ---------- *

'* Представление вещественных чисел в ЭВМ типа IBM PC *

'* *

'* Август 2009г. Автор: Перчиц С.Н. *

'*************************************************************************

DEFINT I

CLS

DIM bt%(4)

DO

INPUT "Введите значение вещественной переменной -> ", a

adr% = VARPTR(a)

PRINT "переменная a ="; a

PRINT "ее адрес ="; adr%


FOR i = 1 TO 4

bt%(i) = PEEK(adr% + i - 1)

NEXT i


PRINT "Переменная записана в памяти как: ";

FOR i = 4 TO 1 STEP -1

IF bt%(i) < 16 THEN PRINT HEX$(0);

PRINT HEX$(bt%(i));

NEXT i

PRINT


PRINT "Повторить?"

DO

w$ = INKEY$

LOOP WHILE w$ = ""

LOOP WHILE w$ = CHR$(13)