Вопрос по работе And, Or и Xor

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

Для удобства. Шестнадцатеричная запись немного короче ;) Фактически двоичная нужна разве что для иллюстрации того, как выполняются операции, а работать удобнее с шестнадцатеричными.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

fs444 писал(а):А зачем ты их до этого в шестнадцатиричную переводил?

Исключительно для компактного отображения. :)
---------------------------------------------------------------
Если Вы работаете в Windows, то у Вас там есть калькулятор. Переведите его в инженерный вид, переключайте его то в двоичное то в десятичное исчисление и попрактикуйтесь в операциях AND, OR, XOR - всё будет очень наглядно видно.
fs444
новенький
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Сообщение fs444 »

Если Вы работаете в Windows, то у Вас там есть калькулятор. Переведите его в инженерный вид, переключайте его то в двоичное то в десятичное исчисление и попрактикуйтесь в операциях AND, OR, XOR - всё будет очень наглядно видно.

Спасибо за совет :) Я так и делаю

Добавлено спустя 16 минут 20 секунд:
У меня есть книжка "Основы программирования". Вот там написано "Убедитесь, что -256 And 256=0, -256 Or 256=-1, -256 Xor 256=-1". А у меня получается -256 And 256=256, -256 Or 256=-256, -256 Xor 256=-512. Почему в книжке так написано?
LAutour
новенький
Сообщения: 34
Зарегистрирован: 13.06.2006 10:30:34
Контактная информация:

Сообщение LAutour »

Либо в той книжке отрицательные числа даны в ОК, а не ДК,
либо там не знаки минуса, а знаки отрицания (NOT)
fs444
новенький
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Сообщение fs444 »

Вот что написано в этой книжке:
op.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

А текст программы из книжки можно?
fs444
новенький
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Сообщение fs444 »

Либо в той книжке отрицательные числа даны в ОК, а не ДК,
либо там не знаки минуса, а знаки отрицания (NOT)

Что означает ОК и ДК? Что делают знаки отрицания (NOT)?
Мне на другом форуме (http://forum.sources.ru/index.php?showtopic=249736&st=0) подсказали, что возможно в книжке опечатка, и ее автор просит сравнить не -256 и 256, а -256 и 255. Если сравнивать именно -256 и 255, то получаются ожидаемые 0, -1 и -1.

SII
Вот текст программы:
and_or_xor.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.
LAutour
новенький
Сообщения: 34
Зарегистрирован: 13.06.2006 10:30:34
Контактная информация:

Сообщение LAutour »

Not - операция инверсии всех битов в числе: not(10001111) = 01110000
Обратный код (ОК) - способ получения отрицательных чисел инверсией битов соответствующего положительного числа.
Дополнительный код (ДК) - способ получения отрицательных чисел как ОК соотвествующего положительного числа + 1.
Наглядно ДК выглядит как инверсия слева-направо всех битов положительного числа до последней значащего бита: ДК(010111000) = 101001000.
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

Нда, текст проги не оставляет сомнений, что имеет место либо глупейшая ошибка авторов, либо опечатка -- что куда вероятнее. Ну и малость дополню уже сказанное до меня.

Обратный код в настоящее время для представления отрицательных чисел не используется (во всяком случае, в сколько-нибудь известных процессорах). Ну а дополнительный используется повсеместно, в т.ч. в архитектуре IA-32, на которой основаны все нынешние персоналки. Так что понимать его, уметь преобразовывать туда-сюда-обратно попросту обязательно :)

Дополнительный код можно сравнить со счётчиком, например, километров на спидометре, пущенным в обратную сторону: после 0 будет 99999, потом -- 99998, 99997 и так далее. Точно так же и с отрицательными двоичными числами. Например, для чисел размером байт это выглядит так:

Код: Выделить всё

   0 = 0000 0000
  -1 = 1111 1111
  -2 = 1111 1110
  -3 = 1111 1101
   .....
-127 = 1000 0001
-128 = 1000 0000
fs444
новенький
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Сообщение fs444 »

Нда, текст проги не оставляет сомнений, что имеет место либо глупейшая ошибка авторов, либо опечатка -- что куда вероятнее.

Это ты про -256 и 255?
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

Угу.
Ответить