| Операция
| Результат
| Ограничения
| Примеры выражений
|
| Логические
|
| х & у
| поразрядное логическое И
соответствующий разряд результата 1, если оба разряда х и у равны 1;
0 – иначе
| х и у – целочисленные операнды типа char, short, int, long
| char c = '\325'
(c=11010101)
c & 3 (3=00000011) ->
|
| х | у
| поразрядное логическое ИЛИ
соответствующий разряд результата 0, если оба разряда х и у равны 0;
1 – иначе
| х и у – целочисленные операнды типа char, short, int, long
| char c = '\325'
(c=11010101)
c | 3 (3=00000011) ->
|
| х ^ y
| поразрядное исключающее ИЛИ
соответствующий разряд результата 1, если оба разряда х и у различны;
0 – если совпадают
| х и у – целочисленные операнды типа char, short, int, long
| char c = '\325'
(c=11010101)
c ^ 3 (3=00000011) ->
|
| ~ х
| дополнение до единицы
бит со значением 1 обращается в 0 и наоборот
| х – операнд типа char, short, int, long
| char c = '\325'
(c=11010101)
~ c -> 00101010
|
| Сдвиг
|
| х << у
| сдвиг влево на у разрядов;
освобождающиеся младшие разряды заполняются нулями
| у положительно и меньше разрядности машины
| char c = '\325'
(c=11010101)
c << 3 -> 10101000
|
| х >> у
| сдвиг вправо на у разрядов;
освобождающиеся старшие разряды заполняются нулями для переменных типа unsigned или значением старшего (знакового) бита
| у положительно и меньше разрядности машины
| char c = '\325'
(c=11010101)
c >> 3 -> 11111010
|
Пример 1.
/*Программа демонстрирует работу с логическими и поразрядными операциями, операциями сравнения и определения размера*/
#include <stdio.h>
void main(){
int a=4, b=2, c=0, log_i, log_ili, log_ne,
bit_i, bit_ili, bit_il, bit_dop, bit_s,
sr_o, sr_op, sr_r, k1, k2, k3;
char s='\325';
printf("a=%d, b=%d, c=%d\n\n",a,b,c);
/*Логические операции*/
log_i=a&&b; /*Логическое И*/
printf("a&&b=%d\n",log_i);
log_i=a&&c; /*Логическое И*/
printf("a&&c=%d\n",log_i);
log_ili=a||b; /*Логическое ИЛИ*/
printf("\ta||b=%d\n",log_ili);
log_ili=a||c; /*Логическое ИЛИ*/
printf("\ta||c=%d\n",log_ili);
log_ili=0||c; /*Логическое ИЛИ*/
printf("\t0||c=%d\n",log_ili);
log_ne=!c; /*Логическое НЕ*/
printf("!c=%d\n",log_ne);
log_ne=!a; /*Логическое НЕ*/
printf("!a=%d\n\n",log_ne);
/*Поразрядные (побитовые) операции*/
//вывод происходит в шестнадцатеричной системе счисления
bit_i=s&3; /*поразрядное логическое И*/
printf("\ts&3=%x\n",bit_i);
bit_ili=s|3; /*поразрядное логическое ИЛИ*/
printf("\ts|3=%x\n",bit_ili);
bit_il=s^3; /*поразрядное исключающее ИЛИ*/
printf("\ts^3=%x\n",bit_il);
bit_dop=~s; /*дополнение до единицы*/
printf("\t~s=%x\n",bit_dop);
bit_s=s<<3; /*поразрядный сдвиг влево*/
printf("s<<3=%x\n",bit_s);
bit_s=s>>3; /*поразрядный сдвиг вправо*/
printf("s>>3=%x\n\n",bit_s);
/*Опеации сравнения*/
sr_o=a<b; /*а меньше b*/
printf("\ta<b=%d\n",sr_o);
sr_o=a>b; /*а больше b*/
printf("\ta>b=%d\n",sr_o);
sr_op=a<=b; /*а меньше или равно b*/
printf("a<=b=%d\n",sr_op);
sr_op=a>=b; /*а больше или равно b*/
printf("a>=b=%d\n",sr_op);
sr_op=a>=4; /*а больше или равно b*/
printf("a>=4=%d\n",sr_op);
sr_r=a==b; /*a равно b*/
printf("\ta==b=%d\n",sr_r);
sr_r=a==4; /*а равно 4*/
printf("\ta==4=%d\n",sr_r);
sr_r=a!=4; /*а не равно 4*/
printf("\ta!=4=%d\n",sr_r);
sr_r=a!=b; /*а не равно b*/
printf("\ta!=b=%d\n\n",sr_r);
/*Операция определения размера памяти (в байтах)*/
k1=sizeof(int);
/*число байтов, отводимое для объектов типа int*/
printf("sizeof(int)=%d\n",k1);
k2=sizeof(float);
/*число байтов, отводимое для объектов типа float*/
printf("sizeof(float)=%d\n",k2);
k3=sizeof 2*a; /*число байтов, отводимое для хранения
результата умножения 2*а*/
printf("sizeof 2*a =%d\n",k3);
}