
Вопрос задан 18.01.2019 в 09:40.
Предмет Информатика.
Спрашивает Новиченко Алёна.
29 or -49высчитать pascal По возможности объяснить, как высчитать это с помощью калькулятора, ибо
паскаль выдает 223, а калькулятор -33.

Ответы на вопрос

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



Отвечает Талгарова София.
Все зависит от типа переменных!
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
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


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili