homeboekenlinksledenabonneer je :Blijf op de hoogte door je te abonneren op de vbvoorbeelden RSS Niews Feed!Blijf op de hoogte door vbvoorbeelden te volgen op Twitter!Blijf op de hoogte door fan te worden van vbvoorbeelden op Facebook!
Visual Basic 2008 en 2010 Voorbeelden en Boeken Microsoft Visual Studio 2010Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

visual basic 2008 voorbeelden en boeken / visual basic 2010 voorbeelden en boeken

4.1. Operator Precedence

Print Email Deel op FacebookDeel op TwitterDeel op DiggBookmark op Google BookmarksDeel op del.icio.usOverige Sociale Netwerksites...

Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Een expressie kan bestaan uit vele subexpressie gecombineerd met vele verschillende operatoren. Sommige subexpressies zullen eerder geëvalueerd worden dan andere en dit gebaseerd op de prioriteit van de gebruikte operator.

Er is dus een prioriteitenlijst bij de operatoren, die de volgorde aangeeft waarin de expressies zullen geëvalueerd worden.

De eerste twee operatoren uit die lijst zijn twee rekenkundige operatoren :
   1 -> ^ ( exponentiation )
   2 -> - ( unary negation )
De volgorde waarin deze operatoren verwerkt worden, kan enigszins verwarrend zijn, enkele voorbeelden om dit te demonstreren :
Visual Basic Broncode
Module Example1
    Sub Main()
        Dim x As Integer = 2
        Dim y As Integer = 3
        '
        Console.WriteLine(x ^ -y)
        '
        y = -3
        '
        Console.WriteLine(x ^ -y)
        '
        Console.ReadLine()
    End Sub
End Module
Visual Basic Output
0,125
8
x ^ -y with x = 2 and y = 3  -> 2 ^ -3 = 1 / (2 ^ 3) = 0.125
x ^ -y with x = 2 and y = -3 -> 2 ^ +3               = 8
Om de macht te kunnen bepalen moet hier eerst de exponent geïnverteerd worden.
Visual Basic Broncode
Module Example2
    Sub Main()
        Dim x As Integer = -2
        Dim y As Integer = 4
        '
        Console.WriteLine(-x ^ y)
        '
        Console.ReadLine()
    End Sub
End Module
Visual Basic Output
-16
-x ^ y with x = -2 and y = 4 -> -(-2 ^ 4) = -16
In de gangbare wiskunde zou dit +16 opleveren ! De regels zijn in een programmeertaal niet altijd dezelfde als in de wiskunde, al komen ze wel vaak overeen.

Zoals de prioriteitenlijst aangeeft, wordt eerst de macht bepaald, nog voor het resultaat geïnverteerd wordt.
Priority List :

1. arithmetic and concatenation operators :

   1.a -> '^' ( exponentiation )
   1.b -> '-' ( unary negation )
   1.c -> '*' ( multiplication ) and / ( division )
   1.d -> '\' ( integer division )
   1.e -> 'Mod' ( modulus )
   1.f -> '+' ( addition ) and - ( subtraction )
   1.g -> '&' ( string concatenation )

2. comparison operators, with identical priority :

   -> '=', '<>', '<', '<=', '>' and '>='

3. logical operators :

   3.a -> 'Not' ( negation )
   3.b -> 'And' and 'AndAlso' ( conjunction )
   3.c -> 'Or', 'OrElse' and 'Xor' ( disjunction )
Expressies gebruik makende van operatoren met gelijke prioriteit, zullen van links naar rechts worden geëvalueerd.

Haakjes kunnen gebruikt worden om van die prioriteit af te wijken. Vaak worden deze ook gewoon gebruikt om de leesbaarheid te bevorderen.

De voorrangsregels in een programmeertaal zijn niet noodzakelijk dezelfde als in de wiskunde. Om verwarring te vermijden valt het aan te raden steeds haakjes te gebruiken.

Hieronder een ( verwarrend ) voorbeeld zonder haakjes :
Visual Basic Broncode
Module Example3
    Sub Main()
        Console.WriteLine(Not 10 * -4 / 2 ^ 2 + 11 = 8 Mod 10 \ -5 ^ 2 / 5 + 1 _
                          OrElse -8 ^ -2 <= 1 AndAlso True = False)
        ' exponentiation and unary negation :
        ' 2 ^ 2 -> 4
        ' -5 ^ 2 -> -(5 ^ 2) -> -25
        ' -8 ^ -2 -> -(8 ^ -2) -> -0.015625
        Console.WriteLine(Not 10 * -4 / 4 + 11 = 8 Mod 10 \ -25 / 5 + 1 _
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' multiplication :
        ' 10 * -4 -> -40
        Console.WriteLine(Not -40 / 4 + 11 = 8 Mod 10 \ -25 / 5 + 1 _
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' division :
        ' -40 / 4 -> -10
        ' -25 / 5 -> -5
        Console.WriteLine(Not -10 + 11 = 8 Mod 10 \ -5 + 1 _
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' integer division :
        ' 10 \ -5 -> -2
        Console.WriteLine(Not -10 + 11 = 8 Mod -2 + 1 _
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' modulus
        ' 8 Mod -2 -> 0
        Console.WriteLine(Not -10 + 11 = 0 + 1 _
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' addition and subtraction :
        ' -10 + 11 -> 1
        ' 0 + 1 -> 1
        Console.WriteLine(Not 1 = 1 OrElse -0.015625 <= 1 AndAlso True = False)
        ' comparison :
        ' 1 = 1 -> True
        ' -0.015625 <= 1 -> True
        ' True = False -> False
        Console.WriteLine(Not True OrElse True AndAlso False)
        ' negation :
        ' Not True -> False
        Console.WriteLine(False OrElse True AndAlso False)
        ' conjunction :
        ' True AndAlso False -> False
        Console.WriteLine(False OrElse False)
        ' disjunction :
        ' False OrElse False -> False
        Console.WriteLine(False)
        '
        Console.ReadLine()
    End Sub
End Module

4.1.1. Oefeningen

Opgave :

Hieronder een aantal samengestelde logische uitdrukkingen ( met p, q en r als atomaire logische uitdrukkingen ), vereenvoudig deze uitdrukkingen. Doe dit bijvoorbeeld door een waarheidstabel op te stellen.
-> p Or (p And q)
-> p And (p Or q)
-> p And ((Not p) Or q)
-> p Or Not p And q
-> Not p Or p And q
-> Not p Or p And Not q
Oplossing :
-> p Or (p And q)

p     | q     | p And q | p Or (p And q)
True  | True  | True    | True
True  | False | False   | True
False | True  | False   | False
False | False | False   | False
De eerste en 4e kolom zijn identiek, dus :
p Or (p And q) = p

-> p And (p Or q)

p     | q     | p Or q | p And (p Or q)
True  | True  | True   | True
True  | False | True   | True
False | True  | True   | False
False | False | False  | False
De eerste en 4e kolom zijn identiek, dus :
p And (p Or q) = p

-> p And ((Not p) Or q)

p     | q     | Not p | (Not p) Or q | p And ((Not p) Or q)
True  | True  | False | True         | True
True  | False | False | False        | False
False | True  | True  | True         | False
False | False | True  | True         | False
Aan de 5e kolom merken we dat het resultaat enkel True is indien zowel p als
q True zijn, net zoals bij de And operator :
p     | q     | p And ((Not p) Or q) | p And q
True  | True  | True                 | True
True  | False | False                | False
False | True  | False                | False
False | False | False                | False
Kolom 3 en 4 zijn identiek, dus :
p And ((Not p) Or q) = p And q

-> p Or Not p And q

p     | q     | Not p | Not p And q | p Or Not p And q
True  | True  | False | False       | True
True  | False | False | False       | True
False | True  | True  | True        | True
False | False | True  | False       | False
Aan de 5e kolom merken we dat het resultaat enkel False is indien zowel p als
q False zijn, net zoals bij de Or operator :
p     | q     | p Or Not p And q | p Or Q
True  | True  | True             | True
True  | False | True             | True
False | True  | True             | True
False | False | False            | False
Kolom 3 en 4 zijn identiek, dus :
p Or Not p And q = p Or q

-> Not p Or p And q

p     | q     | Not p | p And q | Not p Or p And q
True  | True  | False | True    | True
True  | False | False | False   | False
False | True  | True  | False   | True
False | False | True  | False   | True
Voor de rij met resultaat False kan je dus stellen :
Not p Or p And q = False
enkel indien
p and Not q
p     | q     | Not q | p And Not q | Not p Or p And q
True  | True  | False | False       | True
True  | False | True  | True        | False
False | True  | False | False       | True
False | False | True  | False       | True
Kolom 4 en 5 zijn elkaars inversies, dus kun je stellen, dus :
Not p Or p And q = Not (p And Not q) = Not p Or q

-> Not p Or p And Not q

p     | q     | Not p | Not q | p And Not q | Not p Or p And Not q
True  | True  | False | False | False       | False
True  | False | False | True  | True        | True
False | True  | True  | False | False       | True
False | False | True  | True  | False       | True
Enkel indien p And q is resultaat False, dus resultaat
Not p Or p And Not q
is steeds True als
Not (p And q)
of
Not p Or Not q

Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Visual Basic 2008 & 2010 Boeken

Het Groene Visual Basic 2008 & 2010 Voorbeelden Boek Het Blauwe Visual Basic 2008 & 2010 Voorbeelden Boek Het Rode Visual Basic 2008 & 2010 Voorbeelden Boek

Bevalt een artikel je, dan kan je de inhoud van vbvoorbeelden ook reclamevrij in boekvorm verkrijgen.

De inhoud is verdeeld over 3 boeken, Het Groene, Het Blauwe en Het Rode Visual Basic 2008 & 2010 Voorbeelden Boek.

Klik hier voor meer informatie.

Berichten

Fast UML Sequence Diagram Editor