Главная страница

ИКТ. Раздел 1 Понятие информации


Скачать 57.12 Kb.
НазваниеРаздел 1 Понятие информации
Дата24.02.2023
Размер57.12 Kb.
Формат файлаdocx
Имя файлаИКТ.docx
ТипЗадача
#952718
страница2 из 4
1   2   3   4
Раздел 3 Обработка беззнаковых целых чисел

Для контроля выхода суммы за разрядную сетку в микропроцессорах

используется флаг переноса.

Флаг переноса

CF (Carry flag) – битовый флаг, который

устанавливается (= 1), если в результате арифметической операции

произошёл перенос из старшего разряда, иначе – сбрасывается (= 0). При

выполнении операции арифметического сложения флаг CF можно

рассматривать как дополнительный разряд результата.
Задача 1 Найдите однобайтовый двоичный код для чисел. Разрешается

использовать калькулятор Windows.

а) 11

б) 128

в) 19
Решение:

а) Переведем 1110 в двоичную систему вот так:
Целая часть числа находится делением на основание новой 

11

2










-10

5

2







1

-4

2

2







1

-2

1










0












Получилось:1110 = 10112 

б) Переведем 12810 в двоичную систему вот так:
Целая часть числа находится делением на основание новой 

128

2






















-128

64

2



















0

-64

32

2



















0

-32

16

2



















0

-16

8

2



















0

-8

4

2



















0

-4

2

2



















0

-2

1






















0













Получилось:12810 = 100000002 
Результат перевода:
12810 = 100000002
в) Переведем 1910 в двоичную систему вот так:
Целая часть числа находится делением на основание новой 

19

2













-18

9

2










1

-8

4

2










1

-4

2

2










0

-2

1













0












Получилось:1910 = 100112 
Задача 2 Найдите десятичное число по его двоичному коду. Разрешается

использовать калькулятор Windows.

а) 11001011

б) 10000001

в) 11111111

г) 1000000000000000

д) 1000000000000001

е) 1111111111111111
Решение:

а) 110010112 = 1∙27+1∙26+0∙25+0∙24+1∙23+0∙22+1∙21+1∙20 = 128+64+0+0+8+0+2+1 = 20310

б) 100000012 = 1∙27+0∙26+0∙25+0∙24+0∙23+0∙22+0∙21+1∙20 = 128+0+0+0+0+0+0+1 = 12910

в) 111111112 = 1∙27+1∙26+1∙25+1∙24+1∙23+1∙22+1∙21+1∙20 = 128+64+32+16+8+4+2+1 = 25510

г) 10000000000000002 = 1∙215+0∙214+0∙213+0∙212+0∙211+0∙210+0∙29+ 0∙28+0∙27+0∙26+0∙25+0∙24+0∙23+0∙22+0∙21+0∙20 = 32768+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0 = 3276810

д) 10000000000000012 = 1∙215+ 0∙214+0∙213+0∙212+ 0∙211+0∙210+0∙29+0∙28+0∙27+0∙26+0∙25+0∙24+0∙23+0∙22+0∙21+1∙20 = 32768+0+0+0+0+0+0+0+0+0+0+0+0+0+0+1 = 3276910

е) 11111111111111112 = 1∙215+1∙214+1∙213+1∙212+1∙211+1∙210+1∙29+ 1∙28+1∙27+1∙26+1∙25+1∙24+1∙23+1∙22+1∙21+1∙20 = 32768+16384+8192+4096+2048+1024+512+256+128+64+32+16+8+4+2+1 = 6553510

Задача 3 В каких случаях сложение чисел x и y переполнит разрядную сетку и в переменной z будет получен неправильный результат:

а)byte x = 0b10000000;

byte y = 0b01111111;

byte z = (byte)(x + y);

б)byte x = 0b10000001;

byte y = 0b01111111;

byte z = (byte)(x + y);

в)byte x = 0b10000001;

byte y = 0b01111111;

uint z = (uint)(x + y);

г)byte x = 0x0F;

byte y = 0xF0;

byte z = (byte)(x + y);

д)byte x = 0x99;

byte y = 0x99;

byte z = (byte)(x + y);

е) byte x = 0x7F;

byte y = 0x81;

byte z = (byte)(x + y);

ж)ushort x = 0xFFFE;

ushort y = 0b1;

ushort z = (ushort)(x + y);

з)ushort x = 0xF0F0;

ushort y = 0x0F0F;

ushort z = (ushort)(x + y);

и) ushort x = 0xFFFF;

ushort z = (ushort)(x++);

к) ushort x = 0xFFFF;

uint z = (uint)(x++);
Ответ:

б,д,е,и
Задача 7 Найти значение флага CF при выполнении операций над 4-

разрядными беззнаковыми числами. Результат операции записать в

десятичном виде.

а) 0101+1101

б) 1101+1000

в) 0111+1111

г) 1111+1110

Решение:

а) 1012+ 11012)= 100102

100102 = 1∙24+0∙23+0∙22+1∙21+0∙20 = 16+0+0+2+0 = 1810

б) 11012+ 10002= 101012

101012 = 1∙24+0∙23+1∙22+0∙21+1∙20 = 16+0+4+0+1 = 2110

в) 1112+ 11112= 101102

101102 = 1∙24+0∙23+1∙22+1∙21+0∙20 = 16+0+4+2+0 = 2210

г) 11112+ 11102= 111012

111012 = 1∙24+1∙23+1∙22+0∙21+1∙20 = 16+8+4+0+1 = 2910

Раздел 4 Битовая обработка данных

Арифметические операции над битовыми последовательностями числа. Пусть задан байт x=01101010. Требуется найти сумму и произведение его старшей и младшей тетрад. Для этого надо выделить тетрады в отдельные переменные, которые потом арифметически сложить и умножить.

byte x = 0b01101010;

byte y = (byte)(x >> 4);

x = (byte)(x & 0b00001111); // x & 0x0F

Console.WriteLine("x = " + x); // 10

Console.WriteLine("y = " + y); // 6

byte s = (byte)(x + y);

byte p = (byte)(x * y);

Console.WriteLine("s = " + s); // 16

Console.WriteLine("p = " + p); // 60

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

Задача 1 Разработать программу побитного выведения беззнакового байта на экран. Использовать умножение на маску и сдвиги.

Решение:

public class Program

{

public static void Main()

{

byte a = 5;

for (int i = 7; i >= 0; i--) {

Console.Write((a >> i) & 1);

}

Задача 5 Написать программу проверки того, что 2-байтовая переменная

содержит одинаковые байты.

Решение:

publicclassProgram

{

public static void Main()

{

ushort num = ushort.Parse(Console.ReadLine());

int first_byte = (num & 0x00FF) >> 0;

int second_byte = (num & 0xFF00) >> 8;

Задача 7 Разработать программу для решения задачи, описанной в п.8 лекции.

Решение:

public class Program{

public static void Main() {

string input = Console.ReadLine();

byte a = 0;

for (int i = 0; i < 8; i++) {

a = Convert.ToByte(a | (byte.Parse(input[i].ToString()) << (7 - i)));

}

Задача 9 Самостоятельно закодировать информацию о дате (год.месяц.день) в разрядах 4-байтовой переменной. Проверить то, что год, месяц и день не

выходят за свой диапазон (год: 1-2100, месяц: 1-12 и день: 1-31) и вывести

дату на экран в десятичном виде в формате: гггг:мм:дд.

Решение:

public class Program{

public static uint CheckInterval(uint value, uint min, uint max){ // ограничить число диапазоном

return (value < min) ? min : (value > max) ? max : value;

}

public static void Main() {

Console.Write("Год:");

1   2   3   4


написать администратору сайта