Восьмибитовая ячейка - это байт. В байте стандартно можно представить числа в диапазоне от -128 до 127; при этом положительные числа представляются в прямом коде. а отрицательные - в модифицированном. Самый старший (левый, он же - седьмой) бит используется для знака (0 - плюс, 1 - минус), а остальные семь (с нумерацией справа налево от 0 до 6) - для хранения двоичного представления числа. Модифицированный код получается из прямого путем инвертирования бит (0 заменяется на 1, 1 заменяется на 0) - при этом получаем дополнительный код, - а затем прибавлеем к результату 1 в младшем (правом) разряде. а) 56(10)=111000(2) и отображается в байте как 0 0111000 (знаковый бит отделен условно) б) -56(10)=-111000(2), 1 0111000 в прямом коде, 1 1000111 в дополнительном коде, 1 1001000 в модифицированном коде. в) 127(10)=1111111(2) , 0 1111111 в байте г) -127(10)=-111111(2), 1 1111111 в прямом коде, 1 0000000 в дополнительном коде, 1 0000001 в модифицированном коде.
// PascalABC.NET 3.0, сборка 1111 const alpha=['a'..'z']; digits=['0'..'9']; var na,nd,i:integer; s:string; begin na:=0; nd:=0; Write('Введите текст: '); Readln(s); for i:=1 to Length(s) do if s[i] in alpha then Inc(na) else if s[i] in digits then Inc(nd); if na>nd then Writeln('В тексте больше букв') else if na<nd then Writeln('В тексте больше цифр') else Writeln('В тексте букв и цифр поровну') end.
Тестовое решение: Введите текст: the equation 3.546x^2+4.18x-4.1=0 В тексте больше букв
Модифицированный код получается из прямого путем инвертирования бит (0 заменяется на 1, 1 заменяется на 0) - при этом получаем дополнительный код, - а затем прибавлеем к результату 1 в младшем (правом) разряде.
а) 56(10)=111000(2) и отображается в байте как 0 0111000 (знаковый бит отделен условно)
б) -56(10)=-111000(2), 1 0111000 в прямом коде, 1 1000111 в дополнительном коде, 1 1001000 в модифицированном коде.
в) 127(10)=1111111(2) , 0 1111111 в байте
г) -127(10)=-111111(2), 1 1111111 в прямом коде, 1 0000000 в дополнительном коде, 1 0000001 в модифицированном коде.
const
alpha=['a'..'z'];
digits=['0'..'9'];
var
na,nd,i:integer;
s:string;
begin
na:=0; nd:=0;
Write('Введите текст: '); Readln(s);
for i:=1 to Length(s) do
if s[i] in alpha then Inc(na)
else
if s[i] in digits then Inc(nd);
if na>nd then Writeln('В тексте больше букв')
else
if na<nd then Writeln('В тексте больше цифр')
else Writeln('В тексте букв и цифр поровну')
end.
Тестовое решение:
Введите текст: the equation 3.546x^2+4.18x-4.1=0
В тексте больше букв