Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c-operators.doc
Скачиваний:
7
Добавлен:
08.11.2018
Размер:
198.14 Кб
Скачать
      1. Задание.

Известно, что коды строчных латинских букв меньше кодов прописных букв (в ASCII-таблице) на 32. Как с помощью маскирования можно преобразовывать прописные латинские буквы в строчные? Что будет, если операцию применить к строчной букве?

Второй тип маскирования требует скопировать часть разрядов из данной битовой последовательности в другую, а остальные биты заполнить единицами. Эту операцию можно выполнить с помощью побитового "или". Маска строится по принципу: в копируемые разряды заносятся нули, а в заполняемым единицами — единицы.

      1. Пример.

Дано число a=0x6DB7.

Скопировать в b восемь левых бит, а восемь правых заполнить единицами.

а= 0110 1101 1011 0111

|

маска= 0000 0000 1111 1111

—————————————

b= 0110 1101 1111 1111

a = 0110 1101 1011 0111

|

маска = 0000 0000 1111 1111

—————————————

b= 0110 1101 1111 1111

Как и в первом случае, маска может оказаться зависящей от длины слова. Например, требуется скопировать восемь младших разрядов и заполнить единицами остальные. Это выполнятся одним из следующих способов:

b = а | 0хFF00 (зависит от длины слова)

или

b = а | 0хFF (не зависит от длины слова).

      1. Задание.

Как с помощью маскирования можно преобразовывать строчные латинские буквы в прописные?

Третий тип маскирования — часть разрядов копируется в новое слово, а остальные разряды инвертируются.

      1. Пример.

Дано число a=0х6DB7.

Скопировать в b восемь левых разрядов, а остальные инвертировать.

Задача решается с помощью " исключающего или": b=а^0хff

a = 0110 1101 1011 0111

^

маска = 0000 0000 1111 1111

—————————

b= 0110 1101 0100 1000 = 0х6D48

Маска здесь выбирается по следующему правилу: копируемым

разрядам соответствуют нули, а инвертируемым - единицы.

Если нужно скопировать старшие разряды (левые), а инвертировать правые, то это можно сделать одним из следующих способов:

b=a^0хFF00=0x92B7 (зависит от длины слова)

или

b=а^ 0хFF=0x92B7 (не зависит от длины слова).

Операцию "исключающее или" можно использовать как переключатель значения определенного бита при многократном выполнении операции с постоянным вторым операндом, содержащим 1 в соответствующем бите. Пусть вначале бит содержит нуль. Тогда после первого выполнения операции бит переключается в 1 (0^1=1), при втором он обнулится (1^1=0) и так далее.

0^1=1.

Теперь бит установлен в единицу и повторяя действие обнулим его

1^1=0 и т.д.

      1. Пример.

Пусть a=0х6DB7 и дана маска = 0х4. Тогда

0х6DB7^0х4 = 0x6DB3 (обнуляется третий бит справа)

0х6DB3^0x4 = 0x6DB7 (третий бит вновь единица и т.д.).

      1. Задание.

Как организовать переключение регистра для латинских букв?

Операции сдвига

В Си для побитового сдвига операнда имеется две операции:

<< — сдвиг влево

>> — сдвиг вправо

В каждой из них используется два операнда. Первый (левый) — это операнд

целого типа, представляющий битовую последовательность, которую

надо сдвинуть. Второй — беззнаковое целое, указывающее

количество позиций, на которые производится сдвиг. Это число не может

превышать по величине длину первого операнда.

При сдвиге влево биты, перемещаемые за пределы слова, теряются, а освобождающиеся справа разряды заполняются нулями.

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