Оператор | сравнивает каждый бит 1-го операнда с соответствующим битом 2-го операнда; если хотя бы один из них или равен 1, то соответствующий бит результата =1, иначе = 0. Операция | используется для включения битов: x | 7устанавливает в 1 три последних бита переменной х (число 7 =000001112), остальные биты переменной не изменяются.
Например: 127&0x03 дает 3 (остаток от деления 127 на 4).
127=0x7f=01111111
01111111&11 // 00000011=3
Оператор ^ сравнивает каждый бит первого операнда с соответствующим битом второго операнда; если значения битов одинаковое, то соответствующий бит результата устанавливается в 0, если разное - бит результата устанавливается в 1. Оператор ^ часто используется для обнуления переменных: n=n^n; Значение переменной n будет равно 0. Используя этот оператор можно обменять значения двух переменных, не используя третью: x=x^y; y=x^y; x=x^y;
Упр. Разобрать след. примеры:
short int a=0x45ff, b=0x00ff;
~ b; // -0x7f00
a | b // 0x45ff a & b // 0x00ff a ^ b // 0x4500
Операторы сдвига Оператор << (сдвиг влево) выполняет побитовый сдвиг влево левого операнда на количество разрядов, соответствующее значению правого операнда. Сдвиг на 1 бит эквивалентен умножению на 2. Результатом является целое число.
Оператор >> (сдвиг вправо): выполняет побитовый сдвиг вправо левого операнда на количество разрядов, соответствующее значению правого операнда. Если число без знака, то левые биты = 0. Сдвиг на 1 бит вправо эквивалентен делению на 2. Результатом является целое число.
Сдвиг вправо может быть арифметическим (т. е. освобождающиеся слева разряды заполняются значениями знакового разряда) или логическим в зависимости от реализации, однако гарантируется, что при сдвиге вправо целых чисел без знака освобождающиеся слева разряды будут заполняться нулями.
Побитовый сдвиг влево или вправо эквиалентен умножению и делению на степени 2 :
unsigned short m=2000; m = m>>4; //200010 =0x7D0=111 1101 00002 //0111 1101 0000; //0111 1101=0x7D=7*16+13=125 //2000:24 =2000:16=125
В С++ представлены как простой оператор присваивания, так и составные операторы присваивания, совмещающие выполнение арифметической операции или побитовой операции и присваивания.
Простой оператор присваивания
обозначается символом = (знак равенства), имеет два операнда: операнд1 = операнд2 В результате операнду1 присваивается значение операнда2 и вырабатывается значение, равное значению, полученному первым операндом. Операнд2 может быть выражением.
Оператор присваивания в правой части выражения Оператор присваивания (=) не обязан стоять в отдельной строке и может входить в более крупные выражения: int v1,v2; v1 = 8 * (v2 = 5);//v1=40, v2=5 int i=0; double x=0; x = (i = 5.25) + 6.5; // i=5 x=11.5 (5+6.5)
Множественные присваивания В С++ допустимо множественное присваивание i=j=k; x=y=z=0; Множественное присваивание - это отнюдь не присваивание нескольким переменным одного и того же значения. Множественное присваивание работает по тем же правилам, как любое использование оператора присваивания в правой части выражения.
Например: int i=0; float x=0, y=0; bool b=false; x = b = i = y = 4.567; // y=4.567, i=4, b=1, x=1 и float x1=0, y1=4.5, z1=3.2; x1 = (y1 = z1) = 6.5; // z1=3.2, y1=6.5, x1=6.5
Составные операторы присваивания Формат: переменная оператор выражение Имеется 10 составных операторов, каждый из которых связан с арифметической или побитовой операцией, требующей двух операндов. Алгоритм выполнения составного оператора: - взять значение первого (левого) операнда; - выполнить требуемую операцию, используя в качестве первого операнда это значение левого операнда, а в качестве второго - выражение в правой части оператора присваивания; - присвоить полученное значение пременной в левой части оператора присваивания.
Арифметические составные операторы присваивания
+= Сложение с замещением
-= Вычитание с замещением
*= Умножение с замещением
/= Деление с замещением
%= Деление по модулю с замещением
Например:
x+=1; //x=x+1;
y*=z; //y=y*z;
Побитовые составные операторы присваивания
&= Побитовое И с замещением
|= Побитовое ИЛИ с замещением
^= Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ с замещением
>>= Сдвиг вправо с замещением
<<= Сдвиг влево с замещением
Например:
unsigned short y = 0x00FF;
y &= 0xAA80;
cout << hex << y << endl; // 80
Преобразование типов при присваивании При выполнении оператора присваивания, когда типы операндов не совпадают, значение правой части преобразовывается к типу левой части. Правила такого преобразования приведены в следующей таблице:
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав!Последнее добавление