Вот такая программа позволяет инвертировать нечётные биты во введённом 16-ти разрядном числе (тип word).
Если что, счёт битов я брал начиная с нуля. Поэтому, младший бит (нулевой) считается чётным. Если вдруг у вас там принято считать биты начиная с единицы, то младший будет нечётным, и тогда в строке где b := 2; надо поставить единицу вместо двух.
Также, я сделал отображение всех 16 разрядов введённого числа, и числа которое получилось после инверсии битов (то есть, число выводится в двоичном виде, начиная со старших разрядов). Это сделано для удобства проверки работы программы.
После проверки лучше удалить эти две строки (они выделены жирным шрифтом), ведь в задании не сказано выводить числа в двоичном виде.
var
a, b, n: word;
begin
write('Введите целое неотрицательное число: a= ');
readln(a);
b:=32768;for n:=15 downto 0 do begin write((a mod(b*2))div b);b:=b div 2;end;writeln();
b := 2;
for n := 0 to 7 do
begin
if (a mod (b * 2)) div b = 0
then a := a + b
else a := a - b;
b := b * 4;
end;
b:=32768;for n:=15 downto 0 do begin write((a mod(b*2))div b);b:=b div 2;end;writeln();
writeln('После инверсии нечётных битов: a= ', a);
end.
01011101₂ = 2⁷∙0 + 2⁶∙1 + 2⁵∙0 + 2⁴∙1 + 2³∙1 + 2²∙1 + 2¹∙0 + 2⁰∙1 = 0 + 64 + 0 + 16 + 8 + 4 + 0 + 1 = 93₁₀
00111110₂ = 0∙2⁷+0∙2⁶+1∙2⁵+1∙2⁴+1∙2³+1∙2²+1∙2¹+0∙2⁰ = 0+0+32+16+8+4+2+0 = 62₁₀
00110000₂ = 0∙2⁷+0∙2⁶+1∙2⁵+1∙2⁴+0∙2³+0∙2²+0∙2¹+0∙2⁰ = 0+0+32+16+0+0+0+0 = 48₁₀
11010000₂ = 1∙2⁷+1∙2⁶+0∙2⁵+1∙2⁴+0∙2³+0∙2²+0∙2¹+0∙2⁰ = 128+64+0+16+0+0+0+0 = 208₁₀
ответ: 93 62 48 208