29 or -49высчитать pascal По возможности объяснить, как высчитать это с помощью...

0 голосов
27 просмотров

29 or -49
высчитать
pascal
По возможности объяснить, как высчитать это с помощью калькулятора, ибо паскаль выдает 223, а калькулятор -33.


Информатика (109 баллов) | 27 просмотров
0

Вы знаете, почему 4294967247 и -49 это одно и то же?

0

задание писал выше

0

секунду

0

Напиши задание полностью.

0

Эникей сейчас решит и посмотрим

0

Возможно надо все делать в шортинт, и в конце преобразавать число в байт

0

А как 207 or 29 = 223 надеюсь объяснять не надо?

0

Если 4294967247 обрезать до byte, получится 207

0

согласен, с shortint всё работает верно, но я в замешательстве, ибо не понимаю что ставить в контр. значение. -33 или то, что высчиталось паскалем 223...

0

Будет произведено вычисление с операндами типа integer, а результат обрезан до byte.

Дано ответов: 2
0 голосов
Правильный ответ

Переменные типа shortint хранят данные в дополнительном коде. Разрядность - 8 бит, диапазон представления данных -128₁₀ - 127₁₀, самый левый бит - знаковый.
Переменные типа byte хранят данные в прямом коде. Разрядность 8 бит, диапазон представления данных 0 - 255₁₀, знаковый бит отсутствует.

Число 29₁₀ = 00011101₂ и в таком виде оно помещается в shortint.
Число -49₂ = -00110001₂ и оно помещается в shortint в дополнительном коде как 11001111₂
Операция or в языке Pascal осуществляется поразрядно.
    00011101
∨ 11001111
---------------
    11011111
Эта последовательность бит, если её рассматривать как shortint, соответствует числу -33 в дополнительном коде.
Но если её переписать в восьмибитное поле, рассматриваемое как беззнаковое целое (т.е. тип byte), ее значение будет равно 223₁₀

(150k баллов)
0

ок

0

верно

0

всё таки самый разъяснённый ответ.

0

верно, Roman?

0

человек не понимает, как отрицательные числа представляются в дополнительном коде

0

самый левый бит - знаковый, а не байт

0 голосов

Все зависит от типа переменных!

var a: smallint;
var b: integer;
var c: cardinal;
var d: byte;

begin
        a := 29 or -49;
        b := 29 or -49;
        c := 29 or -49;
        d := 29 or -49;

        writeln('smallint: ', a);
        writeln('integer: ', b);
        writeln('cardinal: ', c);
        writeln('byte: ', d);
end.

smallint: -33
integer: -33
cardinal: 4294967263
byte: 223


(9.2k баллов)
0

4294967263 and 255 и будет как раз 223

0

Вот при чем тут разрядности.

0

Если тип переменной - беззнаковое целое разрядностью 8 бит (byte).

0

да при чем тут разрядности... Дело в том, что мне нужно просто понять, как именно паскаль высчитал, что 29 OR -49 будет 223, а калькулятор выдал -33