
Преобразование числа из прямого кода в дополнительный осуществляется так:
Если число, записанное в прямом коде, положительное, то к нему дописывается старший (знаковый) разряд, равный 0, и на этом преобразование заканчивается;
Если число, записанное в прямом коде, отрицательное, то все разряды числа инвертируются, а к результату прибавляется 1. К получившемуся числу дописывается старший (знаковый) разряд, равный 1.
1) Записываем наше число в прямом(обычном двоичном коде в 16-разрядном представлении)
-7 в десятичной = 0000000000000111 - нули у нас впереди так как сетка 16 -разрядная
2) Инвертируем все разряды числа: 1111111111111000
3) Прибавляем к этому числу 1: 1111111111111001
4) Старший знаковый разряд у нас уже равен 1 следовательно число -7 в 10-ой в дополнительном коде: 1111110100111010
4)Число 1011112 перевести в восьмеричную систему счисления
function Pow(a,x:integer):integer;
var
P, i :integer;
begin
if x = 0 then
Pow := 1
else
begin
P := 1;
for i := 1 to x do
P := P * a;
Pow := P;
end;
end;
var
count, c, r:integer;
begin
count := 0;
r := 0;
c := 101111;
while c > 0 do
begin
r := r + (c mod 10) * Pow(2, count);
inc(count);
c := c div 10;
end;
writeln('R = ', r);
end.
5) Выполните умножение чисел 1112 и 1112
function Pow(a,x:integer):integer;
var
P, i :integer;
begin
if x = 0 then
Pow := 1
else
begin
P := 1;
for i := 1 to x do
P := P * a;
Pow := P;
end;
end;
function Summ(a, b:integer):integer;
var
r, t, count:integer;
begin
count := 0;
r := 0;
t := 0;
while (a > 0) or (b > 0) do
begin
r := r + (((a mod 2) + (b mod 2) + t) mod 2) * Pow (10, count);
inc(count);
t := (a mod 2 + b mod 2 + t) div 2;
a := a div 10;
b := b div 10;
end;
r := r + t * Pow(10, count);
Summ := r;
end;
var
A,B , buff, count, r:integer;
begin
count := 0;
r := 0;
A := 111;
B := 111;
buff := B;
while Buff > 0 do
begin
r := Summ(r, A * (Buff mod 10) * Pow(10, count));
Buff := Buff div 10;
inc(count);
end;
writeln('R = ', r);
end.
2) Определить количество двоичных разрядов достаточных для кодирования 510 различных состояний?
function Pow(a,x:integer):integer;
var
P, i :integer;
begin
if x = 0 then
Pow := 1
else
begin
P := 1;
for i := 1 to x do
P := P * a;
Pow := P;
end;
end;
var
N, count :integer;
begin
count := 1;
write('N = ');
Readln(N);
N := abs(N);
while (Pow(2, count) < N) do
inc(count);
writeln('Count = ', count);
readln;
end.