Операции сравнения
Операция | Результат | Ограничения | Примеры выражений |
Отношения | |||
х < у (x > y) | 1, если х меньше (больше) у; 0 – иначе | результат типа int | 3 < 2 (результат 0) 3 > 2 (результат 1) |
х <= у (x >=y) | 1, если х меньше или равно (больше или равно) у; 0 – иначе | результат типа int | 3 <= 2 (результат 0) 3 >= 2 (результат 1) 3 >= 3 (результат 1) |
Сравнение на равенство | |||
х == у | 1, если х равно у; 0 – иначе | результат типа int | 3 == 2 (результат 0) 3 == 3 (результат 1) |
х != у | 1, если х не равно у; 0 – иначе | результат типа int | 3 != 3 (результат 0) 3 != 2 (результат 1) |
Поразрядные операции (побитовые)
Операция | Результат | Ограничения | Примеры выражений |
Логические | |||
х & у | поразрядное логическое И соответствующий разряд результата 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);
}
Задания
1.Наберите код программы из Примера 1. Сохраните код в файл с именем log_srav.cpp. Выполните компиляцию и запуск программы.
2.Написать программу. Записать выражение, зависящее от координат точки x1 и y1, принимающее значение 1, если точка принадлежит заштрихованной области, и 0, если не принадлежит.
3.Напишите программы для вычисления следующих выражений и выведите в результате значения переменных a, b и j на экран. Полученные результаты обосновать в комментариях.
1) int j, b = 5, a =4;
j = b---a;
2) int j, b = 5, a =4;
j = (b--)-a;
3) int j, b = 5, a =4;
j = b-(--a);
Домашние задания
1.Напишите программы для вычисления следующих выражений и выведите в результате значения переменных a, b и j на экран. Полученные результаты обосновать в комментариях.
1) int j, b=5, a=4;
j = --b-a--;
2) int j, b=5, a=4;
j = -a++-++b;
3) int j, b=5, a=4;
j = a-++b;
2.Индивидуальное задание. Номер варианта определяется по журналу. Написать программу. Записать выражение, зависящее от координат точки x1 и y1, принимающее значение 1, если точка принадлежит заштрихованной области, и 0, если не принадлежит.
Варианты индивидуального задания
№ | Задание | № | Задание |
1 | 2 | ||
3 | 4 | ||
5 | 6 | ||
7 | 8 | ||
9 | 10 | ||
11 | 12 | ||
13 | 14 | ||
15 | 16 | ||
17 | 18 | ||
19 | 20 | ||
21 | 22 | ||
23 | 24 | ||
25 | 26 | ||
27 | 28 |
Дата добавления: 2015-02-16; просмотров: 766;