Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Magistr.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.85 Mб
Скачать
  1. Битовые операции в языках программирования.

Побитовое И

Побитовое И используется для выключения битов. Любой бит, установленный в  , вызывает установку соответствующего бита результата также в  .

&

11001010  11100010

11000010

[править]Побитовое ИЛИ

Побитовое ИЛИ используется для включения битов. Любой бит, установленный в  , вызывает установку соответствующего бита результата также в  .

|

11001010  11100010

11101010

[править]Побитовое НЕ

Побитовое НЕ инвертирует состояние каждого бита исходной переменной.

~

11001010

00110101

[править]Побитовое исключающее ИЛИ

Исключающее ИЛИ устанавливает значение бита результата в  , если значения в соответствующих битах исходных переменных различны.

^

11001010  11100010

00101000

[править]Побитовые сдвиги

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

Сдвиг влево может применяться для умножения числа на два, сдвиг вправо — для деления.

x = 7 // 00000111 (7)

x = x >> 1 // 00000011 (3)

x = x << 1 // 00000110 (6)

x = x << 5 // 11000000 (-64)

x = x >> 2 // 11110000 (-16)

В языке программирования Java существует также оператор беззнакового битового сдвига вправо  . При использовании этого оператора на освободившиеся позиции всегда устанавливаются нули.

x = 7 // 00000111 (7)

x = x << 5 // 11100000 (-32)

x = x >>> 2 // 00111000 (56)

  1. Двоичный поиск.

int Search_Binary (int arr[], int left, int right, int key)

{

int midd = 0;

while (1)

{

midd = (left + right) / 2;

if (key < arr[midd])       // если искомое меньше значения в ячейке

right = midd - 1;      // смещаем правую границу поиска

else if (key > arr[midd])  // если искомое больше значения в ячейке

left = midd + 1;    // смещаем левую границу поиска

else                       // иначе (значения равны)

return midd;           // функция возвращает индекс ячейки

 

if (left > right)          // если границы сомкнулись

return -1;

}

}

 

int main()

{

setlocale (LC_ALL, "rus");

const int SIZE = 12;

int array[SIZE] = {};

int key = 0;

int index = 0; // индекс ячейки с искомым значением

 

for (int i = 0; i < SIZE; i++) // заполняем и показываем массив

{

array[i] = i + 1;

cout << array[i] << " | ";

}

cout << "\n\nВведите любое число: ";

cin >> key;

index = Search_Binary (array, 0, SIZE, key);

 

if (index >= 0)

cout << "Указанное число находится в ячейке с индексом: " << index << "\n\n";

else

cout << "В массиве нет такого числа!\n\n";

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]