Побітовий оператор «XOR» 

Дещо змінимо попередню програму в частині обробки події CheckedChanged (Зміна стану прапорця). Замість двох умов  if напишемо  один оператор:

Label1.Font = New Font("Courier New", 14.0F, Label1.Font.Style Xor FontStyle.Bold)

Тут кожен раз при зміні стану прапорця значення параметру Label1.Font.Style порівнюється з одним і тим самим значенням FontStyle.Bold. Оскільки між ними стоїть побітовий оператор Xor (оператор виключення АБО), він буде призначати  Bold, якщо поточне значення  Label1.Font.Style "не Bold". А якщо Label1.Font.Style перебуває в стані "Bold", то оператор Xor буде призначати значення "не Bold". Цей оператор ще  називають логічним XOR.

Таблиця істинності логічного XOR має вигляд:

A B A Xor B
0 0 0
0 1 1
1 0 1
1 1 0

В даному випадку в нас завжди  B = 1 (FontStyle.Bold), а A (Label1.Font.Style) змінює значення то Bold, то Regular (тобто "не Bold"). Таким чином, оператор Xor завжди буде призначати протилежне значення тому, яке записане в Label1.Font.Style.

Як видно використання побітового оператора призвело до значного зменшення кількості програмного коду.

Порада

Використання побітових операторів може значно спростити написання програм зі складною логікою

Реалізуємо програму подібну до попереднього прикладу, але на цей раз керуватимемо стилем FontStyle шрифту двома прапорцями CheckBox. Один як і раніше задаватиме стиль Bold або звичайний Regular , а другий задаватиме курсив Italic або повертає в  Regular.

Для початку завантажимо Visual Studio 2010 та обираємо пункт меню Файл – Создать проект (File | New | Project).  У наступному вікні New Project обираємо пункт Visual Basic, а потім в області шаблонів (середня колонка) обираємо шаблон (Templates) Windows Forms Application. В якості назви проекту введемо імя Оператор XOR і натиснемо кнопку ОК

Далі з панелі елементів керування Toolbox перемістимо на форму мітку Label та два прапорці CheckBox.

В лістингу наведений текст програми керування цими об’єктами:

Public Class Form1

    'Програма керує стилем тексту мітки Label за допомогою двох прапорців CheckBox,

    'та використовуючи побітовий оператор XOR

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                           Handles MyBase.Load

        'Задамо початкові властивості елементам керування форми

        Me.Text = "Прапорці та оператор XOR"

        CheckBox1.Text = "Напівжирний"

        CheckBox1.TabIndex = 0

        CheckBox2.Text = "Курсив"

        CheckBox2.TabIndex = 1

        Label1.Text = "Оберіть стиль шрифту"

        Label1.TextAlign = ContentAlignment.MiddleCenter

        'задаємо вирівнювання тексту по центру

        Label1.Font = New Font("Courier New", 14.0F)

        'задаємо основний стиль шрифту

    End Sub

 

    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, _

                                         ByVal e As System.EventArgs) _

                                         Handles CheckBox1.CheckedChanged

        Label1.Font = New Font("Courier New", 14.0F, Label1.Font.Style Xor FontStyle.Bold)

    End Sub

 

    Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, _

                                         ByVal e As System.EventArgs) _

                                         Handles CheckBox2.CheckedChanged

        Label1.Font = New Font("Courier New", 14.0F, Label1.Font.Style Xor FontStyle.Italic)

    End Sub

End Class 

Як видно з лістингу, нічого принципово нового тут немає, лише додана обробка події зміни стану прапорця CheckedChanged для CheckBox2. Приклад програми наведено на рисунку: