Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava_2.doc
Скачиваний:
15
Добавлен:
18.11.2019
Размер:
1.09 Mб
Скачать

Дополнение до единицы

Оператор поразрядного дополнения до единицы, представленный символом ~ (в математике тильда - сим­вол разности), переключает все биты значения с 1 на 0 и с 0 на 1. Дополнение до единицы является унарным оператором, который предшествует своему операнду подобно унарному плюсу или минусу (как в выражениях -34 или +value).

Используйте унарную операцию дополнения до единицы для выполнения поразрядного отрицания двоичных значений. Например, выражение

А = ~В

присваивает переменной А значение дополнения или отрицания переменной В.

Листинг 2.9 демонстрирует оператор поразрядного дополнения до единицы. Введите и запустите програм­му, затем введите одно число, чтобы получить значение его дополнения.

Листинг 2.9. ТСОМР.С (поразрядное дополнение до единицы)

_____________________________________________________

1: #include <stdio.h>

2: #include "pbin.c"

3:

4: main()

5: {

6: unsigned int v1, v2;

7:

8: printf("Enter value to complement: ");

9: scanf("%u", &v1);

10: v2 = ~v1;

11: printf(" %5d %#06x ", v1, v1); pbin(v1);

12: printf( “====================================\n");

13: printf("COMP %5d %#06x ", v2, v2); pbin(v2);

14: return 0;

15: }

_______________________________________________________

Дополнение до единицы - это обычная операция низкого уровня, которую большинство компьютерных процессоров выполняет в мгновение ока. Являясь двоичной логической операцией, дополнение до единицы имеет два назначения: инвертирование значений "истина" и "ложь", а также преобразование отрицательных значений в положительные и наоборот.

Если 0 представляет "ложь", то -0 является "истиной", так как отрицание нуля дает -1 (беззнаковое число 65535), а любое ненулевое число означает "истину". (Чтобы убедиться в этом, запустите ТСОМР и введите 0.) Обратное утверждение также справедливо: отрицание -1 равно 0. Однако отрицание не каждого ненулевого чис­ла дает 0.

Кроме этого, операция дополнения до единицы играет роль в преобразовании отрицательных и положи­тельных целых. Прибавление единицы к результату выражения дополнения до единицы формирует другое значение, называемое дополнением до двух. Посмотрите на следующий результат работы программы:

-49 0xffd3 1111111111010011

=========================

Сомр 44 0х002с 0000000000101100

Очевидно, что 44+1 равно 45 - абсолютному значению числа -45 (беззнаковый эквивалент). Затем вве­дите число 45 и получите другой результат:

45 0x002d 0000000000101101

=================================

СОМР -46 0xffd2 1111111111010010

Прибавление 1 к числу -46 дает первоначальное значение –45.

Один плюс дополнение до единицы любого знакового целого v равно тому же самому значению с противоположным знаком.

Рис. 6.6 иллюстрирует действие опера­тора дополнения до единицы, примененно­го к двоичному значению 00101100. Срав­ните биты 2-5 на этом рисунке с приме­ром исключающего ИЛИ на рис. 2.3. Вы­полнение исключающего ИЛИ над некото­рым битом и единичным битом пере­ключает значение первого бита (то же самое делает операция дополнения до единицы); эту важную связь следует запомнить. Например, операция ис­ключающего ИЛИ с операндами 00101100 и 11111111 даст тот же результат, что и выражение -00101100.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]