|
Dit artikel is gepubliceerd op zondag 31 juli 2011 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 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application 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 2010 Broncode Module Example2 Sub Main() Dim x As Integer = -2 Dim y As Integer = 4 Console.WriteLine(-x ^ y) Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application 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 2010 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) Console.WriteLine( Not 10 * -4 / 4 + 11 = 8 Mod 10 \ -25 / 5 + 1 OrElse -0.015625 <= 1 AndAlso True = False) Console.WriteLine( Not -40 / 4 + 11 = 8 Mod 10 \ -25 / 5 + 1 OrElse -0.015625 <= 1 AndAlso True = False) Console.WriteLine( Not -10 + 11 = 8 Mod 10 \ -5 + 1 OrElse -0.015625 <= 1 AndAlso True = False) Console.WriteLine( Not -10 + 11 = 8 Mod -2 + 1 OrElse -0.015625 <= 1 AndAlso True = False) Console.WriteLine( Not -10 + 11 = 0 + 1 OrElse -0.015625 <= 1 AndAlso True = False) Console.WriteLine( Not 1 = 1 OrElse -0.015625 <= 1 AndAlso True = False) Console.WriteLine( Not True OrElse True AndAlso False) Console.WriteLine( False OrElse True AndAlso False) Console.WriteLine( False OrElse False) Console.WriteLine( False) Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
4.1.1. OefeningenOpgave :
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 zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|