Хелпикс

Главная

Контакты

Случайная статья





Лабораторная Работа № 6



Тема:  Выполнение поразрядных операций.

Цель:   

1. Закрепить теоретические знания (ЗТЗ) и приобрести практические навыки (ППН) в реализации Си-программ с использованием операторов ввода, вывода, управляющих символов.

2. ЗТЗ и ППН в составлении программ с использованием различных операций.

3. Закрепить знания и навыки работы в IDE BC++ на IBM PC.

Теоретические сведения:

 

       В языке С и С++ реализованы операции, которые выполняются над битами (двоичными разрядами), содержащими значения. Поразрядные операторы (перечислены в следующей таблице) можно использовать только с целыми типами.

Оператор Значение
& | ^ ~ > > < < И ИЛИ Исключающее ИЛИ Дополнение до 1 Сдвиг вправо Сдвиг влево

           

Таблица истинности для операторов &, |  и ^ имеет следующий вид.

 

P Q P& Q P|Q P^Q

           

При выполнении поразрядных операций И, ИЛИ исключающего ИЛИ эти правила

применяются к каждому биту каждого оператора.

       Приведем пример выполнения каждой из этих поразрядных операций:

     01001101                      01001101               01001101

& 00111011             |   00111011         ^ 01110110

  00001001                      01111111               01110110

           

Оператор дополнения до еденицы (~) будет инвертировать все биты оператора. Например, если символьная переменная ch имеет двоичный код 00111001, то после выполнения оператора  ch=~ch; двоичный код переменной ch будет иметь вид 11000110.

       Оператор сдвига вправо (> > ) и влево (< < ) сдвигают все биты целого значения на заданное число разрядов. При выполнении сдвига « выдвинутые» с одного конца операнда биты «теряются», а на другом конце освободившиеся позиции заполняются нулями. (Если же сдвигаемое значение отрицательное, то для сохранения знака «вдвигаются» не нули, а единицы. ) Число стоящих справа от оператора сдвига, указывает количество сдвигаемых позиций.

 

Общая форма записи операторов сдвига имеет следующий вид:

значение> > количество

значение< < количество

       Здесь количество означает количество позиций, на которое будет сдвинуто значение.

       Если двоичный код значения(пусть значение не имеет знака) равен 00111101, то после сдвига вправо получим 00011110, а после сдвига влево результатом будет 01111010.

       Ниже показан приоритет поразрядных операторов.

Приоритет Оператор
Наивысший   Низший ~ > > < < & ^ |

     

    Пример: Программа реализующая побитовые операции.

#includ< stdio. h>

#includ< conio. h>

void main(void)

{

cnt a, a1, a2, b, c, p1, p2, p3;

clrscr();

printf(“Введите число в 16-ой системе счисления\n);

scanf(“%x”, & a);

printf(“Введите два действительных числа\n”);

scanf(“%d%d”, & b, & c);

a1=a> > 3; a2=a< < 5;

p1=b& c; p2=b|c; p3=b^c;

printf(“Сдвиг влево(< < 5)%x\n”, a2);

printf(“Сдвиг вправо (> > 3)%x\n”, a1);

printf(“Операция ‘& ’: %d \n”, p1);

printf(“Операция ‘|’: %d\n”, p2);

printf(“Операция ‘^’: %d\n”, p3);

getch();

}

 

Протокол:

Введите число в 16-ой системе счисления

aadf

Введите два действительных числа

Сдвиг влево(< < 5)5be0

Сдвиг вправо (> > 3)f5sb

Операция ‘& ’: 19

Операция ‘|’: 127
Операция ‘^’: 108

 

Задание:

  1. Возьмите действительные числа. Переведите их в удобную вам систему счисления и осуществите над ними побитовые операции (контрольный расчет).
  2. Напишите программу, которая осуществляет такие же операции над теми же действительными числами, что и в контрольном расчете.
  3. Сделайте выводы о соответствии результатов.

 

       Контрольные вопросы:

  1. Что такое побитовые операции?
  2. Над данными какого типа осуществляются побитовые операции?
  3. Перечислите приоритет побитовых операций?

 

Содержание отчета:

  1. Краткие теоретические сведения.
  2. Тексты составленных программ.
  3. Протоколы к составленным программам.
  4. Вывод о проделанной работе.

 

 

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.