Задание 1. а) представим -17₁₀ в обратном коде на 8-битном регистре - запишем число 17₁₀ в двоичной системе: 10001₂ - дополним его слева нулями до 8 знаков: 00010001 - поскольку число отрицательное, инвертируем каждый разряд, т.е. заменяем 0 на 1, а 1 на 0: 11101110 б) представим 22 в обратном коде на 8-битном регистре - запишем число 22₁₀ в двоичной системе: 10110₂ - дополним его слева нулями до 8 знаков: 00010110 - поскольку число положительное, его не нужно менять. в) выполняем сложение
Возник перенос в девятый разряд, которого у нас нет (т.е. фактически произошло переполнение регистра). В этом случае перенос нужно осуществить в младший разряд, т.е. сложить результат с единицей и окончательно получим 00000101
Задание 2. а) представим -17₁₀ в дополнительном коде на 8-битном регистре - запишем число 17₁₀ в двоичной системе: 10001₂ - дополним его слева нулями до 8 знаков: 00010001 - поскольку число отрицательное, инвертируем каждый разряд, т.е. заменяем 0 на 1, а 1 на 0: 11101110 - прибавляем единицу в младший разряд: 11101111 б) представим 22 в дополнительном коде на 8-битном регистре - запишем число 22₁₀ в двоичной системе: 10110₂ - дополним его слева нулями до 8 знаков: 00010110 - поскольку число положительное, его не нужно менять. в) выполняем сложение
Возник перенос в девятый разряд, которого у нас нет (т.е. фактически произошло переполнение регистра). При суммировании в дополнительном коде переполнение игнорируется, поэтому результат не меняется.
// PascalABC.NET 3.2, сборка 1485 от 15.06.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Количество строк/столбцов в матрице:'); Writeln('*** Исходная матрица [',n,',',n,'] ***'); var a:=MatrRandom(n,n,-99,99); a.Println(4); Writeln(4*a.ColCount*'-'); var j:=0; var nr:=ArrFill(n,False); foreach var c in a.Cols do begin var s:=c.Where(x->x>0); if s.Count>0 then begin var min:=s.Min; var k:=c.Where(x->x>min).Count; nr[j]:=k>3; j+=1 end end; Writeln('*** Результирующая матрица ***'); for var i:=0 to n-1 do if nr[i] then a.SetCol(i,a.Col(i).Select(x->(x>0?x div 2:x)).ToArray); a.Println(4) end.
а) представим -17₁₀ в обратном коде на 8-битном регистре
- запишем число 17₁₀ в двоичной системе: 10001₂
- дополним его слева нулями до 8 знаков: 00010001
- поскольку число отрицательное, инвертируем каждый разряд, т.е. заменяем 0 на 1, а 1 на 0: 11101110
б) представим 22 в обратном коде на 8-битном регистре
- запишем число 22₁₀ в двоичной системе: 10110₂
- дополним его слева нулями до 8 знаков: 00010110
- поскольку число положительное, его не нужно менять.
в) выполняем сложение
Возник перенос в девятый разряд, которого у нас нет (т.е. фактически произошло переполнение регистра). В этом случае перенос нужно осуществить в младший разряд, т.е. сложить результат с единицей
и окончательно получим 00000101
Задание 2.
а) представим -17₁₀ в дополнительном коде на 8-битном регистре
- запишем число 17₁₀ в двоичной системе: 10001₂
- дополним его слева нулями до 8 знаков: 00010001
- поскольку число отрицательное, инвертируем каждый разряд, т.е. заменяем 0 на 1, а 1 на 0: 11101110
- прибавляем единицу в младший разряд: 11101111
б) представим 22 в дополнительном коде на 8-битном регистре
- запишем число 22₁₀ в двоичной системе: 10110₂
- дополним его слева нулями до 8 знаков: 00010110
- поскольку число положительное, его не нужно менять.
в) выполняем сложение
Возник перенос в девятый разряд, которого у нас нет (т.е. фактически произошло переполнение регистра). При суммировании в дополнительном коде переполнение игнорируется, поэтому результат не меняется.