Рабочая тетрадь № 3
Для представления чисел в ЭВМ обычно используют битовые наборы – последовательности нулей и единиц фиксированной длины. Позиция в битовом наборе называется разрядом.
|
1. Теоретический материал
| Для представления целых чисел без знака удобен битовый набор, соответствующий записи в двоичной системе счисления. Для целых числе без знака как правило выделяютk = 8, 16, 32 или 64 разряда.
Для получения компьютерной записи целого числа без знака требуется его перевод в двоичную систему счисления, далее необходимо дополнить результат нулями слева до стандартной разрядностиk.
| 2. Пример
| Задача:
|
| Найти представление беззнакового целого числа 2610 в восьмиразрядном битовом наборе
| Решение:
|
| Переведем число 26 в двоичную систему счисления. 26
| 2
|
|
|
|
| -26
| 13
| 2
|
|
|
| 0
| -12
| 6
| 2
|
|
|
| 1
| -6
| 3
| 2
|
|
|
| 0
| -2
| 1
|
|
|
|
| 1
|
|
| Результат перевода: 2610 = 110102
Дополним полученный результат слева нулями до восьми шестнадцати
2610 = 000 110102
| Ответ:
|
| 00011010
|
3. Задания
| 1.
| Задача:
|
| Найти представление беззнакового числа 13210 в шестнадцатиразрядном битовом наборе
| Решение:
|
| Переведем число 132 в двоичную систему счисления.
132/2 = 66 (ост. 0); 66/2 = 33 (ост. 0); 33/2 = 16 (ост.1); 16/2 = 8 (ост. 0); 8/2 = 4 (ост. 0); 4/2 = 2 (ост. 0); 2/2 = 1 (ост.0)
Результат перевода: 13210 = 100001002
Дополним полученный результат слева нулями до шестнадцати
13210 = 00000000 100001002
| Ответ:
|
| 0000000010000100
| 2.
| Задача:
|
| Найти минимальное и максимальное значения чисел для 16-ти разрядного беззнакового представления
| Решение:
|
| Минимальное – 00000000000000002 = 010
Максимальное – 11111111111111112 = 1*20 + 1*21 + 1*22 + 1*23 + 1*24 + 1*25 + 1*26 + 1*27 + 1*28 + 1*29 + 1*210 + 1*211 + 1*212 + 1*213 + 1*214 + 1*215 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024 + 2048 + 4096 + 8192 + 16384 + 32768 = 6553510
| Ответ:
|
| 0, 65535
|
1. Теоретический материал
| Для целых чисел со знаком задействуют три варианта компьютерного представления:
представление в прямом коде; представление в обратном коде; представление в дополнительном коде.
Во всех этих способах старший (левый) разряд равен нулю, если число положительное и единице, если число отрицательное. Остальные разряды числа (цифровая часть или мантисса) задействованы для представления модуля числа.
Положительные числа в дополнительном, обратном и прямом коде идентичны – мантисса включает двоичное представление числа, а в старшем разряде располагается ноль.
Для отображения отрицательного значения в прямом коде, в разряд знака ставиться единица, а в разряды мантиссы – двоичный код его модуля.
Обратный код отрицательного числа получается инверсией всех цифр двоичного представления абсолютной величины, включая знаковый разряд: нули инвертируются в единицы, а единицы в нули.
Дополнительный код чисел с отрицательным знаком рассчитывается путем прибавления единицы к его младшему разряду обратного кода числа.
|
2. Пример
| Задача:
|
| Перевести число 45 в прямой, обратный и дополнительный код (k = 8)
| Решение:
|
| Сначала переведем десятичное число 45 в двоичную систему счисления. 45
| 2
|
|
|
|
|
| -44
| 22
| 2
|
|
|
|
| 1
| -22
| 11
| 2
|
|
|
|
| 0
| -10
| 5
| 2
|
|
|
|
| 1
| -4
| 2
| 2
|
|
|
|
| 1
| -2
| 1
|
|
|
|
|
| 0
|
|
| Получилось:4510 = 1011012.
Запишем прямой код числа. Первый слева разряд 0 (знак «плюс»). Оставшиеся 7 разрядов занимает число в двоичном представлении. Если в числе меньше 7 разрядов, оставшиеся дополняются нулями слева. Таким образом, для числа 45 получаем прямой код в виде 0,0101101 (первый слева 0 соответствует знаку, затем следует 0, дополняющий число до 7 разрядов, затем следует само двоичное число). Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково.
| Ответ:
|
| 0,0101101
| Задача:
|
| Найти прямой, обратный и дополнительный коды в однобайтовом представлении для числа -5610.
| Решение:
|
| Выполним перевод положительного числа 56 в двоичную систему счисления, получим: 5610 = 1110002.
Запишем прямой код числа. Всего в однобайтовом представлении 8 двоичных разрядов. Первый слева разряд – знаковый: 1 – для отрицательного числа. Оставшиеся 7 разрядов занимает число в двоичном представлении. Если в числе меньше 7 разрядов, оставшиеся дополняются нулями слева. Таким образом, для числа -56 получаем прямой код в виде 1,0111000.
Обратный код отрицательного числа получается из прямого инверсией всех разрядов, за исключением знакового. Получаем: 1,1000111.
Дополнительный код отрицательного числа получается из обратного кода прибавлением к двоичному числу единицы (знаковый разряд в операции не участвует):
1000111
+ 1
_____________
1001000
Получаем: 1,1001000
| Ответ:
|
| Прямой код 1,0111000
Обратный код 1,1000111
Дополнительный код 1,1001000
|
3. Задания
| 1.
| Задача:
|
| Перевести число 12 в прямой, обратный и дополнительный код (k = 8)
| Решение:
|
| Сначала переведем десятичное число 12 в двоичную систему счисления.
12/2 = 6 (ост. 0); 6/2 = 3 (ост. 0); 3/2 = 1 (ост.1)
Получилось:1210 = 11002.
Запишем прямой код числа. Первый слева разряд 0 (знак «плюс»). Оставшиеся 7 разрядов занимает число в двоичном представлении. Если в числе меньше 7 разрядов, оставшиеся дополняются нулями слева. Таким образом, для числа 12 получаем прямой код в виде 0,0001100 (первый слева 0 соответствует знаку, затем следуют три 0, дополняющий число до 7 разрядов, затем следует само двоичное число). Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково.
| Ответ:
|
| 0,0001100
| 2.
| Задача:
|
| Найти прямой, обратный и дополнительный коды в однобайтовом представлении для числа -3510.
| Решение:
|
| Выполним перевод положительного числа 35 в двоичную систему счисления, получим: 3510 = 1000112.
Запишем прямой код числа. Всего в однобайтовом представлении 8 двоичных разрядов. Первый слева разряд – знаковый: 1 – для отрицательного числа. Оставшиеся 7 разрядов занимает число в двоичном представлении. Если в числе меньше 7 разрядов, оставшиеся дополняются нулями слева. Таким образом, для числа -35 получаем прямой код в виде 1,0100011.
Обратный код отрицательного числа получается из прямого инверсией всех разрядов, за исключением знакового. Получаем: 1,1011100.
Дополнительный код отрицательного числа получается из обратного кода прибавлением к двоичному числу единицы (знаковый разряд в операции не участвует):
1011100
+ 1
_____________
1011101
Получаем: 1,1011101
| Ответ:
|
| Прямой код 1,0100011
Обратный код 1,1011100
Дополнительный код 1,1011101
| 3.
| Задача:
|
| Задан дополнительный код числа в однобайтовом представлении: 1,1011100. Найти число в десятичной системе счисления.
| Решение:
|
| Дополнительный код отрицательного числа получается из обратного кода прибавлением к двоичному числу единицы (знаковый разряд в операции не участвует):
1011100
- 1
_____________
1011011
Обратный код (1,1011011) отрицательного числа получается из прямого инверсией всех разрядов, за исключением знакового.
Прямой код (1,0100100).
Х10 = 1001002
Х10 = 0*20 + 0*21 + 1*22 + 0*23 + 0*24 + 1*25 = 0 + 0 + 4 + 0 + 0 + 32 = 3610
Так как первый слева разряд – 1 – число отрицательно.
| Ответ:
|
| -36
|
1. Теоретический материал
| Сложение и вычитание чисел без знака осуществляется по стандартным алгоритмам для позиционных систем счисления.
При сложении в обратном коде складываются все разряды (включая знаковый) по обычному алгоритму. Результат сложения для k-разрядных чисел в общем виде имеет длину k+1 (старший разряд единица, если при сложении старших разрядов операндов был перенос, иначе – ноль). Значение левого k+1-го разряда прибавляется к младшему разряду результата. В итоге получим k-разрядный битовый набор – сумму чисел в обратном коде. Разность чисел в обратном коде x – y можно свести к операции сложения x + (–y).
В дополнительном коде для сложения сначала по обычному алгоритму складываются все разряды (включая знаковый), а затем единицу переноса в k+1-й разряд необходимо отбросить.
|
2. Пример
| Задача:
|
| Сложить два числа: А10 = 7, В10 = 16.
| Решение:
|
| Переведем числа в двоичную систему счисления
А2 = +111 = +0111; В2 = +10000.
Исходные числа имеют различную разрядность, необходимо провести выравнивание разрядной сетки:
[A2]п = [A2]ок = [A2]дк = 0|00111; [В2]п = [В2]ок = [В2]дк = 0|10000.
Сложение в обратном или дополнительном коде дает один и тот же результат: +
| 0|
| 00111
| 0|
| 10000
| С2 =
| 0|
| 10111
| С10 =
| 23
|
| Ответ:
|
| 23
| Задача:
|
| Сложить два числа: А10 = +16, В10 = -7 в ОК (обратный код) и ДК (дополнительный код).
| Решение:
|
| Требуется преобразование А+(-В), в котором второй член записывается с учетом его знака:
[A2]п = [A2]ок = [A2]дк = 0|10000;
[В2]п = 1|111 = 1|00111; [В2]ок = 1|11000; [В2]дк = 1|11001
При складывании чисел в обратном и дополнительном кодах получены переносы в знаковый разряд и из знакового разряда. В случае первом случае (обратный код) при переносе из знакового разряда необходимо дополнительно прибавить единицу младшего разряда. Во втором случае (дополнительный код) данный перенос игнорируется.
| Ответ:
|
| 9
|
3. Задания
| Задача:
|
|
| Дано два десятичных двузначных целых числа: А = 78, В = 56. Вычислить (А-В)ок, (В-А)дк.
|
| Решение:
|
|
| Переведем числа в двоичную систему счисления
А2 = +1001110; В2 = +111000.
Требуется преобразование А+(-В), в котором второй член записывается с учетом его знака:
[A2]п = [A2]ок = [A2]дк = 0|1001110;
[В2]п = 1|111000 = 1|0111000; [В2]ок = 1|1000111; [В2]дк = 1|1001000 +
| 0|
| 1001110
| 1|
| 1000111
|
С2 =
| 10|
+\
0|
| 0010101
---------1
0010110
| С10 =
| +22
| Требуется преобразование B+(-A), в котором второй член записывается с учетом его знака:
[B2]п = [B2]ок = [B2]дк = 0|111000 = 0|0111000;
+
| 0|
| 0111000
| 1|
| 0110010
|
С2 =
| 1| 1|
| 1101010 1101010
| [A2]п = 1|1001110; [A2]ок = 1|0110001; [A2]дк = 1|0110010
В старшем бите 1. Следовательно, в результате сложения получили отрицательное число. Переведем его обратно в прямой код.
Дополнительный код отрицательного числа получается из обратного кода прибавлением к двоичному числу единицы (знаковый разряд в операции не участвует):
1101010
- 1
_____________
1101001
Обратный код (1, 1101001) отрицательного числа получается из прямого инверсией всех разрядов, за исключением знакового.
Прямой код (1,0010110).
Х10 = 00101102 = 101102
Х10 = 0*20 + 1*21 + 1*22 + 0*23 + 1*24 = 0 + 2 + 4 + 0 + 16 = 2210
Так как первый слева разряд – 1 – число отрицательно.
|
| Ответ:
|
|
| 22, -22
|
|
Тест 3
| 0.
| Задание:
|
| Для представления целого числа может применяться
| Ответ:
|
| A) нормализованный или ненормализованный код
B) прямой, обратный или дополнительный код
C) естественный или экспоненциальный код
D) логарифмический и показательный код
| 0.
| Задание:
|
| Положительное число
| Ответ:
|
| A) выглядит одинаково только в прямом и обратном кодах
B) выглядит одинаково только в обратном и дополнительном кодах C) выглядит одинаково в прямом, обратном и дополнительном кодах
D) выглядит различно в прямом, обратном и дополнительном кодах
| 0.
| Задание:
|
| Если взять отрицательное число и инвертировать разряды кроме знакового, то получится
| Ответ:
|
| A) обратный код
B) прямой код
C) дополнительный код
D) двоичный код
| 0.
| Задание:
|
| Дополнительный код числа получается
| Ответ:
|
| A) из обратного кода прибавлением единицы к младшему разряду без переноса в знаковый разряд
B) из обратного кода прибавлением единицы к младшему разряду с переносом в знаковый разряд
C) из прямого кода прибавлением единицы к младшему разряду без переноса в знаковый разряд
D) из прямого кода прибавлением единицы к младшему разряду с переносом в знаковый разряд
|
0.
| Задание:
|
| Если к двоичному числу без знака добавить знаковый разряд то получится
| Ответ:
|
| A) обратный код
B) прямой код
C) дополнительный код
D) двоичный код
| 0.
| Задание:
|
| Число Х = 1410 в восьми разрядном двоичном дополнительном коде равняется
| Ответ:
|
| A) 00001110 B) 0110010
C) 1110001 D) нет верного ответа
| 0.
| Задание:
|
| Восьми разрядное двоичное число Х = (10001010)2, заданное в дополнительном коде в десятичной системе равняется
| Ответ:
|
| A) –10 B) +10 C) –117 D) –118
| 0.
| Задание:
|
| Восьми разрядное двоичное число Х = (00100111)2 заданное в обратном коде в десятичной системе равняется
| Ответ:
|
| A) –39 B) +39 C) –88 D) +88
| 0.
| Задание:
|
| Число Х = -6310 в прямом коде будет представлено как
| Ответ:
|
| A) 10111111 B) 00111111 C) 10011111 D) 00011111
| 0.
| Задание:
|
| Укажите дополнительный код десятичного числа -103 (минус сто три) в 8 разрядном компьютерном представлении.
| Ответ:
|
| 10011001
| Реализация задач на языке программирования Python
При написании программ часто возникает ситуация, когда необходимо производить различные математические вычисления. Как и другие языки программирования, Python предоставляет разнообразные функции для выполнения вычислений.
|
1. Теоретический материал
| Для математических расчетов с использованием стандартных математических функций требуется импортировать соответствующую библиотеку:
import math
После импорта к функциям библиотеки можно обращаться следующим образом:
math.имя_функции(…)
В таблице представлен синтаксис и описание ключевых математических функций библиотеки math языка Python
Функция
Назначение
ceil(x)
Округляет число x до ближайшего большего целого (округление "вверх").
floor(x)
Округляет число x до ближайшего меньшего целого (округление "вниз").
fabs(x)
Принимает абсолютное значение (модуль) числа x.
exp(x)
Принимает значение ex.
log(x[, b])
Если у функции один аргумент x, то функция принимает значение натурального логарифма x. При передаче двух аргументов, второй выступает в качестве основания логарифма.
pow(x, y)
Принимает значение x в степени y.
sqrt(x)
Принимает значение квадратного корня из x.
acos(x)
Принимает значение арккосинуса x в радианах.
asi
(x)
Принимает значение арксинуса x в радиан
х.
atan(x)
Принимает значение арктангенса x в радианах.
cos(x)
Принимает значение косинуса x, где x выражен в радианах.
sin(x)
Принимает значение синуса x, где x выражен в радианах.
tan(x)
Принимает значение тангенса x, где x выражен в радианах.
|
2. Пример
| Задача:
|
| Для введенных чисел x и y найти значение функции
f(x,y) = 2yx+ ln|x+y3|
| Решение (код программы):
|
| import math
x = float(input('Введите x '))
y = float(input('Введите y '))
f = 2 * math.pow(y, x) + math.log(math.fabs(x + y ** 3))
print('f = ', f)
| Задача:
|
| Для введенных чисел x и y найти значение функции
| Решение (код программы):
|
| import math
x = float(input('Введите x '))
y = float(input('Введите y '))
if x * y <= -1:
f = math.sin(x * math.exp(y))
elif x * y >= 5:
f = x * x + math.tan(y)
else:
f = math.sqrt(math.fabs(math.cos(x * y)))
print('f = ', f)
| Задача:
|
| Вычислить значение функции f(x) = sin(x – e2) + 3x на отрезке [xn, xk] с шагом hx
|
Решение (код программы):
|
| import math
xn = float(input('Введите xn '))
xk = float(input('Введите xk '))
hx = float(input('Введите hx '))
x = xn #устанавливаем x в начало отрезка в xn
whilex<= xk: #пока не дойдем до конца отрезка xk
f = math.sin(x + math.exp(2)) + math.pow(3, x)
print('x = ', x, ' f = ', f)
x = x + hx #прибавляем к аргументу шаг
| Задача*:
|
| Вычислить значения функции
При этом x изменяется в отрезке с шагом ; y изменяется в отрезке с шагом .
| Решение (код программы):
|
| import math ax, bx, hx = 0.0, 1.0, 0.2
ay, by, hy = 1.0, 2.0, 0.5 x = ax #устанавливаем x в начало отрезка в xn
while x<= bx: #пока не дойдем до xk
y = ay #устанавливаем y в начало отрезка в yn
while y<= by: #пока не дойдем до yk
if x + y <= 2:
f = math.pow(x + y, 1.0 / 5.0)
else:
f = math.pow(math.fabs(math.sin(x)), y)
print('x: = ', x, 'y = ', y, 'f = ', f) # выводим результат
# или print('x = {:.3}, y = {:.3}, f = {:.3}'.format(x,y,f))
# или print(f'x = {x:.3}, y = {y:.3}, f = {f:.3}')
y = y + hy #прибавляем к y шаг
x = x + hx #прибавляем к x шаг
|
3. Задания
| 1.
| Задача:
|
| Для введенных чисел x и y найти значение функции
| Решение (код программы):
|
| import math
x = float(input('Введите x '))
y = float(input('Введите y '))
f = math.log(math.fabs(math.sin(x + y)))
print('f = ', f)
| 2.
| Задача:
|
| Для введенных чисел x и y найти значение функции
| Решение (код программы):
|
| import math
x = float(input('Введите x '))
y = float(input('Введите y '))
if math.sin(x + y) <= -0.5:
f = math.atan((math.pow(math.fabs(x - y),1/3)*(x * math.exp(y))))
elif math.sin(x + y) >= 0.5:
f = math.pow(x,3) + math.pow(y,1.5)
else:
f = 3*math.log(math.fabs(x * y)[ 3])
print('f = ', f)
| 3.
| Задача:
|
| Вычислить значение функции f(x) = cos3(e*x) + sin|x| на отрезке [a, b] с шагом hx
| Решение (код программы):
|
| import math
a = float(input('Введите a '))
b = float(input('Введите b '))
hx = float(input('Введите hx '))
x = a
while x <= b:
f = math.pow(math.cos(math.e*x),3) + math.sin(math.fabs(x))
print('x = ', x, ' f = ', f)
x = x + hx
|
4.
| Задача:
|
| Вычислить значения функции
При этом x изменяется в отрезке с шагом ; y изменяется в отрезке с шагом .
| Решение (код программы):
|
| import math ax, bx, hx = 1.0, 2.5, 0.5
ay, by, hy = 1.0, 4.0, 1.0 x = ax
while x<= bx:
y = ay
while y<= by:
if x + y <= 2:
f = math.pow(math.sin(x*(math.pow(math.e,0.1*y))), 1.0/3.0)
else:
f = math.fabs(math.log((x+y),2.0))
print('x: = ', x, 'y = ', y, 'f = ', f)
y = y + hy
x = x + hx
| |