Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Примеры вычисления логических выражений




//пример 56.

 

#define PRINT(int) printf("%d\n", int)

int x=2, y=1, z=0;

x = ((x && y) || z); PRINT(x); (2&&1)||0) à x=1
PRINT(x ||!y && z); (истина || ((ложь) && ложь))àистина (1)

 

//пример 57.

 

#define PRINT3(x, y, z) printf("x = %d\t y = %d\t z = %d\n", x, y, z)

int x, y, z;

x = y = z = 1;

++x || ++y && ++z (x=2) à больше ничего не вычисляется
PRINT3(x, y, z) x=2 y=1 z=1

 

x = y = z = 1;

++x && ++y ||  ++z ((x=2) && ((y=2)) à истина à z не вычисляется
PRINT3(x, y, z) x=2 y=2 z=1

 

x = y = z = 1;

++x  &&  ++y  &&  ++z (x=2) && ((y=2) && (z=2)
PRINT3(x, y, z) x=2 y=2 z=2

 

x = y = z = -1;

++x  &&  ++y ||  ++z (x=0) à ложь à y не вычисляется, à z =0 à ложь
PRINT3(x, y, z) x=0 y= -1 z=0

 

x = y = z = -1;

++x || ++y && ++z (x=0) à ((y=0)à ложь à  z не вычисляется)
PRINT3(x, y, z) x=0 y=0 z= -1

 

x = y = z = -1;

++x && ++y && ++z (x=0) à ложь à  y и z не вычисляется
PRINT3(x, y, z) x=0 y=-1 z=-1

Более сложное использование поразрядных логических операций

//пример 58.

int main() // «прокрутить» операторы вручную и проверить результаты

{

Int x, y, z;

x = 03; y = 02; z = 01;

printf("%d\n", x | y & z); //3

printf("%d\n", x | y & ~z); //3

printf("%d\n", x ^ y & ~z); //1

printf("%d\n", x & y && z); //1

 

x = 1; y = -1;

printf("%d\n",!x | x); //1

printf("%d\n", ~x | x); //-1

printf("%d\n", x ^ x); //0

 

x <<= 3;

printf("%d\n", x); //8

 

y <<= 3;

printf("%d\n", y); //-8

 

y >>= 3;

printf("%d \n ", y); //-1

_getch();     

return 0;

}

-----------------------------------------------------------------------------------------

 

//пример 59.

С помощью поразрядной логической операции & легко найти остаток от деления на 2, 4 и т.д.:

unsigned ui, mask = 0x01; //(при делении на 2);  0x03 (на 4); 0x07 (на 8); 0x0f (на 16); 0x1f (на 32);

ui  = 7;

ui & mask; //- значение разряда, который «уходит» при делении на 2 последний раз

00000111 - это 7

00000001 - это 2

------------

00000001 - это 1 (результат операции 7 & 2)

-----------------------------------------------------------------------------------------

//пример 60.

От прибора в ЭВМ поступает 16-разрядный код (справа налево номера от 0 до 15). Допустим, в разрядах 0-4 находится информация от первого датчика, 5-11 – от датчика 2, с 12 по 14 – от датчика 3. Рассмотрим алгоритм выделения информации от каждого из датчиков:

int Х, XX = 32151, x1, x2, x3; //ХX – исходная интегрированная информация

                                                      // xxxx xxxx xxx x xxxx
                                                    //x1, x2, x3 – выделенная информация от датчиков
      .....
X  =  XX;           // xxxx xxxx xxx x xxxx
x1  =  X  &  31; //выделяем разряды с 0 по 4:  31 = 0000 0000 0001 11112

X  =  X  / 32; // сдвигаем  Х  на 5 разрядов вправо,

                 // аналог – команда Х >>= 5: 0000 0 x xx x xxx xxxx

x2  =  X  & 127;      //выделяем очередные 7 разрядов, бывшие разряды 5-11

                       //127 = $7F = 0000 0 0 00 0111 1111

X  =  X  / 128;   // сдвигаем вправо  на очередные 7  разрядов

                                // аналог – команда Х >>= 7: 0000 0000 0000 x xxx

x3  = X  &  7;              //выделяем младшие 3 разряда, бывшие 12 – 14

                      //7 = $7 =  0000 000 0 0000 0 111

-----------------------------------------------------------------------------------------

 

//пример 61.

Состояние 3-х кнопок мыши возвращается в переменной Button (тип char) в такой последовательности: левая, правая, средняя в разряды 0 –2. Тогда для анализа состояния кнопок мыши можно использовать операторы:

LeftButton  =  (Button & 1) == 1;           //включена левая кнопка

RightButton  =  (Button & 2) == 2;         //включена правая кнопка

LeftRightButton  =  (Button & 3) == 3;       //включены левая и правая кнопки

MiddleButton  =  (Button & 4) == 4;     //включена средняя кнопка

LeftMiddleButton  =  (Button & 5) == 5;     //включены левая и средняя кнопки

-----------------------------------------------------------------------------------------

 

Примеры организации циклов с параметром

Цикл while в циклах с параметром

Вычисление суммы чисел натурального ряда от 1 до 10

//пример 62.

Необходимо инициализировать переменную, в которой накапливается результат: в примере это инициализация переменной summa (summa=0); при нахождении произведения натуральных чисел переменная результата инициализировалась бы единицей.

//вариант _1

const int N=10;

int main ()

int i = 1, summa = 0; //определение и инициализация переменных

                   // i является одновременно и счетчиком цикла

while (i <= N)    

     { summa += i; //вычисление суммы

  i++;       //получение нового числа

}

cout << summa<< endl;

_getch();        // задержка на экране результатов вывода

return 0;        

}

 

  // вариант _2

const int N=10;

int main ()

{

int i = 1, summa = 0;  //определение и инициализация переменных

                 //i является одновременно и счетчиком цикла  

while (i <= N)    

summa += i++; //вычисление суммы и получение нового числа

cout << summa<< endl;

_getch();          // для приостановки вывода, задержка на экране результатов

return 0;         

}





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 232 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Есть только один способ избежать критики: ничего не делайте, ничего не говорите и будьте никем. © Аристотель
==> читать все изречения...

2816 - | 2758 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.