Вопрос по работе And, Or и Xor
Модератор: Модераторы
Для удобства. Шестнадцатеричная запись немного короче
Фактически двоичная нужна разве что для иллюстрации того, как выполняются операции, а работать удобнее с шестнадцатеричными.
fs444 писал(а):А зачем ты их до этого в шестнадцатиричную переводил?
Исключительно для компактного отображения.
---------------------------------------------------------------
Если Вы работаете в Windows, то у Вас там есть калькулятор. Переведите его в инженерный вид, переключайте его то в двоичное то в десятичное исчисление и попрактикуйтесь в операциях AND, OR, XOR - всё будет очень наглядно видно.
Если Вы работаете в 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. Почему в книжке так написано?
Либо в той книжке отрицательные числа даны в ОК, а не ДК,
либо там не знаки минуса, а знаки отрицания (NOT)
либо там не знаки минуса, а знаки отрицания (NOT)
Вот что написано в этой книжке:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
А текст программы из книжки можно?
Либо в той книжке отрицательные числа даны в ОК, а не ДК,
либо там не знаки минуса, а знаки отрицания (NOT)
Что означает ОК и ДК? Что делают знаки отрицания (NOT)?
Мне на другом форуме (http://forum.sources.ru/index.php?showtopic=249736&st=0) подсказали, что возможно в книжке опечатка, и ее автор просит сравнить не -256 и 256, а -256 и 255. Если сравнивать именно -256 и 255, то получаются ожидаемые 0, -1 и -1.
SII
Вот текст программы:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Not - операция инверсии всех битов в числе: not(10001111) = 01110000
Обратный код (ОК) - способ получения отрицательных чисел инверсией битов соответствующего положительного числа.
Дополнительный код (ДК) - способ получения отрицательных чисел как ОК соотвествующего положительного числа + 1.
Наглядно ДК выглядит как инверсия слева-направо всех битов положительного числа до последней значащего бита: ДК(010111000) = 101001000.
Обратный код (ОК) - способ получения отрицательных чисел инверсией битов соответствующего положительного числа.
Дополнительный код (ДК) - способ получения отрицательных чисел как ОК соотвествующего положительного числа + 1.
Наглядно ДК выглядит как инверсия слева-направо всех битов положительного числа до последней значащего бита: ДК(010111000) = 101001000.
Нда, текст проги не оставляет сомнений, что имеет место либо глупейшая ошибка авторов, либо опечатка -- что куда вероятнее. Ну и малость дополню уже сказанное до меня.
Обратный код в настоящее время для представления отрицательных чисел не используется (во всяком случае, в сколько-нибудь известных процессорах). Ну а дополнительный используется повсеместно, в т.ч. в архитектуре IA-32, на которой основаны все нынешние персоналки. Так что понимать его, уметь преобразовывать туда-сюда-обратно попросту обязательно
Дополнительный код можно сравнить со счётчиком, например, километров на спидометре, пущенным в обратную сторону: после 0 будет 99999, потом -- 99998, 99997 и так далее. Точно так же и с отрицательными двоичными числами. Например, для чисел размером байт это выглядит так:
Обратный код в настоящее время для представления отрицательных чисел не используется (во всяком случае, в сколько-нибудь известных процессорах). Ну а дополнительный используется повсеместно, в т.ч. в архитектуре IA-32, на которой основаны все нынешние персоналки. Так что понимать его, уметь преобразовывать туда-сюда-обратно попросту обязательно
Дополнительный код можно сравнить со счётчиком, например, километров на спидометре, пущенным в обратную сторону: после 0 будет 99999, потом -- 99998, 99997 и так далее. Точно так же и с отрицательными двоичными числами. Например, для чисел размером байт это выглядит так:
Код: Выделить всё
0 = 0000 0000
-1 = 1111 1111
-2 = 1111 1110
-3 = 1111 1101
.....
-127 = 1000 0001
-128 = 1000 0000
Нда, текст проги не оставляет сомнений, что имеет место либо глупейшая ошибка авторов, либо опечатка -- что куда вероятнее.
Это ты про -256 и 255?
