Príklad na bitové operátory
Poznáte už niečo z výrokovej logiky. Taktiež už by vám nemali byť cudzie pojmy ako bitový operátor alebo bitová reprezentácia nejakého desiatkového čísla. Na záver cyklu o operátoroch si ukážeme jeden príklad na bitové operátory. Každý jednotlivý bitový operátor bude možné použiť len malou obmenou v kóde.
1. príklad: Bitový operátor AND
Sub BitConverter(ByVal cislo, ByVal pocet) As String Dim bit0 As String Dim bit1 As String Dim retazec As String If (cislo >= 0) Then bit1 = "1" bit0 = "0" End If Do While pocet > 0 REM algoritmus na zmenu desiatkovej reprezentácie do binárnej podoby If (cislo AND 1) = 1 Then REM podmienka je pravdivá, ak výrok sa rovná 1 po logickom súčine! retazec = bit1 & retazec Else retazec = bit0 & retazec End If cislo = cislo\2 pocet = pocet – 1 Loop BitConverter = retazec End Sub Sub example Dim retazec As String Dim pocet As Integer pocet = 8 retazec = BitConverter(11, pocet) & " AND " & BitConverter(7, pocet) & " = " & BitConverter(11 AND 7, pocet) & Chr(10) & BitConverter(15, pocet) & " AND " & BitConverter(9, pocet) & " = " & BitConverter(15 AND 9, pocet) & Chr(10) & BitConverter(8, pocet) & " AND " & BitConverter(21, pocet) & " = " & BitConverter(8 AND 21, pocet) & Chr(10) & BitConverter(12, pocet) & " AND " & BitConverter(17, pocet) & " = " & BitConverter(12 AND 17, pocet) & Chr(10) & BitConverter(14, pocet) & " AND " & BitConverter(13, pocet) & " = " & BitConverter(14 AND 13, pocet) & Chr(10) MsgBox retazec End Sub
Výsledok makra
Rozbor makra:
Algoritmus prevedenia desiatkového čísla do binárnej podoby nie je práve najľahší na pochopenie. My si ukážeme presne, ako sa desiatkové číslo zmení na binárne.
Algoritmus, ktorý zmení desiatkové číslo na dvojkové je vo funkcii BitConverter. Zoberieme napríklad číslo 10 a porovná ho s 1.
Čiže prvá iterácia:
0000 1010 je 10
0000 0001 je 1
Výsledok 10 AND 1 je:
0000 0000 je 0
Výsledok prvej iterácie bude 0
Pred druhou iteráciou najprv algoritmus vydelí číslo 10 číslom 2 a výsledok je 5.
Druhá iterácia:
0000 0101 je 5
0000 0001 je 1
Výsledok AND je druhej iterácie:
0000 0001 je 1
Výsledok druhej iterácie je 10
Číslo 5 sa vydelí celočíselným delením a výsledok je 2!
Tretia iterácia:
0000 0010 je 2
0000 0001 je 1
Výsledok AND:
0000 0000 je 0
Výsledok tretej iterácie je 010
Číslo 2 sa vydelí 2 a výsledok je 1.
Štvrtá iterácia:
0000 0001 je 1
0000 0001 je 1
Výsledok AND:
0000 0001 je 1
Výsledok tretej iterácie je 1010.
A tak to pokračuje, až pokým vypíše všetkých 8 bitov. Hodnotu rozsahu bitovej reprezentácie, v tomto prípade 8-bitovej, rozhoduje premenná pocet.
Skúsime ešte bitový operátor OR. A zvyšné hádam zvládnete sami. Pôjde len o kozmetickú úpravu.
2. príklad: Bitový operátor OR
Sub BitConverter(ByVal cislo, ByVal pocet) As String Dim bit0 As String Dim bit1 As String Dim retazec As String If (cislo >= 0) Then bit1 = "1" bit0 = "0" End If Do While pocet > 0 If (cislo AND 1) = 1 Then retazec = bit1 & retazec Else retazec = bit0 & retazec End If cislo = cislo\2 pocet = pocet-1 Loop BitConverter = retazec End Sub Sub example Dim retazec As String Dim pocet As Integer pocet = 8 retazec = BitConverter(11, pocet) & " OR " & BitConverter(7, pocet) & " = " & BitConverter(11 OR 7, pocet) & Chr(10) & BitConverter(15, pocet) & " OR " & BitConverter(9, pocet) & " = " & BitConverter(15 OR 9, pocet) & Chr(10) & BitConverter(8, pocet) & " OR " & BitConverter(21, pocet) & " = " & BitConverter(8 OR 21, pocet) & Chr(10) & BitConverter(12, pocet) & " OR " & BitConverter(17, pocet) & " = " & BitConverter(12 OR 17, pocet) & Chr(10) & BitConverter(14, pocet) & " OR " & BitConverter(13, pocet) & " = " & BitConverter(14 OR 13, pocet) & Chr(10) MsgBox retazec End Sub
Výsledok makra
Rozbor makra:
Jediná kozmetická zmena oproti prvému príkladu je v hlavnej procedúre, kde zmeníme bitový operátor AND na bitový operátor OR. Zvyšok je nedotknutý! V ostatných bitových operátorov ako napríklad XOR postupujte obdobne.