|
Site |
Cours VB.net |
|
|
|
Les Opérateurs |
|
|
+-*/And
OrMod&
Pour travailler sur les variables on utilise des opérateurs (addition, soustraction...).
Addition :+
Dans le cas de variables numériques.
A=B+C
si B=2 et C=3 => A=5
On peut écrire:
A=A+1
Dans ce cas, on affecte à la variable A son ancienne valeur +1, si A=2 au départ il aura ensuite pour valeur 3.
A+=1 est équivalent à A=A+1
Cela incrémente la variable A.
On peut utiliser '+' pour ajouter une String à une autre, il est préférable d'utiliser '&'.
Soustraction : -
B=C-D
A-=1 est équivalent à A=A-1
Multiplication :*
C'est une étoile: *
B= C*D
Division : /
On remarque que « : » n'est pas l'opérateur de division.(Ce signe sert de séparateur quand plusieurs instructions sont sur la même ligne.)
B=C/D
Voir en bas de page, des informations complémentaires car "/" retourne un Double.
Division entière:\
Si A=10\3 => A=3
Voir en bas de page, des informations complémentaires car "\" retourne un Integer.
Puissance : ^
A=B^3 'A=B*B*B
Modulo :
C’est le reste de la division par un nombre :
10 Mod 3 donne 1
Exemple A est-il multiple de 3 ?
Si A Mod 3 =0 , A est un multiple de 3
If A Mod 3 = 0 then...
Concaténation : &
C’est une mise bout à bout des chaînes de caractères.
Si
A= "VISUAL"
B= " "
C= "BASIC"
D=A & B & C donne D="VISUAL BASIC"
Le signe + peut aussi être utilisé mais il est plutôt réservé aux additions de variables numériques.
&= permet aussi la concaténation A&=B est équivalent à A= A&B
Priorités :
L'ordre des calculs
se fait en fonction de la priorité des opérateurs.
S’il y a plusieurs opérateurs, '^' a la priorité la plus forte puis * et / puis + et –
Pour être complet, voyons les priorités par ordre décroissant:
^ élévation à la puissance
- négation unaire
/ et * multiplication et division
\ division entière
mod modulo
+ et- addition et soustraction.
Exemple 2+3^3 donne 29 car VB effectue (3^3)+2 et non pas 125 (2+3)^3
S'il y a plusieurs opérateurs de même priorité, l'ordre des calculs se fait de gauche à droite.
Pour éviter toute
faute d’interprétation utiliser des parenthèses :
2+(3^3) lève toute ambiguïté.
Comparaison :
= égal
> supérieur à
< inférieur à
>= supérieur ou égal
<= inférieur ou égal
<> Différent de
Le résultat d’une comparaison est True (Vrai) ou False (Faux)
Exemple :
Dim A As Integer=2
Dim B As Integer=3
If A=B then
..
End If
A étant différent de B, A=B prend la valeur False et le programme passe à la ligne en dessous de End If (pas après then).
Ici le signe = n’indique pas une affectation mais une expression à évaluer.
Ici aussi on peut combiner les opérateurs et mettre des parenthèses:
R= (C<>D)AND (D=2) 'Si C différent de D et si D égal 2
Comparaison de chaînes de caractères:
Avec Option Compare Binary (par défaut)
Les chaînes de caractères sont comparées en fonction du tri alphabétique.
A<B<C……<Y<Z<a<b<c……y<z<à<é..
Dim A As String="A"
Dim B As String="Z"
If A<B then..
A est bien inférieur à B, donc A<B prend la valeur True et le programme saute après Then.
La casse (majuscules ou minuscule) est différenciée.
Si on veut comparer sans tenir compte du fait que c’est en majuscule ou minuscule, il faut d’abord transformer les 2 chaînes en minuscule par exemple.
On veut comparer A= "aaa" et B= "AAA"
Normalement A est différent de B :
A=B retourne False
Par contre A.ToLower=B.ToLower retourne True (Vraie)
En utilisant Option Compare Text en début de module, on ne différencie plus la casse: "A" devient égal à "a".
Logique : Not And Or ElseOr Xor
Si A et B sont des expressions Booléens:
A And B retourne True si A et B sont vrais
A Or B retourne True si une des 2 est vrai
A Xor B retourne True si une et une seule est vrai
Not A retourne True si A était faux et vice versa
On entend par expression Booléen le résultat de l'évaluation d'une condition:
A=B retourne True si A=B et False si A différent de B.
Exemple
Si A différent de B.. peut s’écrire IF Not(A=B)..
Si A compris entre 2 et 5 peut s’écrire IF A>=2 And A<=5..
Comment faire une bascule:
Il faut écrire A= Not A
A chaque fois que l'on effectue cette instruction A bascule à True s'il était à False et vice versa.
L'opération est effectuée sur chaque bit.
A = 7 'en décimal ( 0111 en binaire)
B = 12 'en décimal( 1100 en binaire)
Que donne A And B?
On effectue l'opération bit à bit:
Pour le premier bit de chaque nombre 0 And 1 = 0
Pour le second bit de chaque nombre 1 And 1 = 1...
Cela donne 0100.
A And B = 4 'en décimal( 0100 en binaire)
Autre exemple:
A And 1 indique si le bit le moins significatif (le plus à droite) est a 1
Exemple: si A = 7 'en décimal ( 0111 en binaire) A And 1 retourne 1
Rentrons dans les détails:
Les opérateurs And, Or et Xor sont évalués en fonction du type d'opérandes :
Les opérateurs AndAlso et OrElse sont uniquement définis sur le type Booléen, ils sont plus rapides car ils n'évaluent pas la seconde expression si ce n'est pas nécessaire.
Déplacement de bits: << et >>
Les opérateurs binaires << et >> effectuent des opérations de déplacement de bits. Ces opérateurs sont définis pour les types Byte, Short, Integer et Long.
L'opérateur << décale à gauche les bits du premier opérande du nombre de positions spécifié. Les bits de poids fort situés en dehors de la plage du type de résultat sont éliminés, et les positions libérées par les bits de poids faible sont remplies par des zéros.
L'opérateur >> décale à droite les bits du premier opérande du nombre de positions spécifié. Les bits de poids faible sont éliminés et, si l'opérande de gauche est positif, les positions libérées par les bits de poids fort sont mises à zéro ; s'il est négatif, elles sont mises à un. Si l'opérande de gauche est de type Byte, les bits de poids fort disponibles sont remplis par des zéros.
A quoi cela sert?
Exemple décaler à gauche un Byte revient à faire une multiplication par 2.
3 en décimal= 11
Je décale à gauche, j'obtient 110 , c'est 6 en décimal.
Remarque 1: Allons plus loin avec / \ :
"/", la division retourne un double:
Avec Option Strict=Off
Dim i As Integer = 4
Dim j As Integer = 2
Dim k As Integer = i / j 'est accepté
Avec Option Strict=On, il faut écrire:
Dim i As Integer = 4
Dim j As Integer = 2
Dim k As Integer = CType(i / j, Integer) 'on est obligé de caster le double en Integer.
De même "\" retourne un Integer.
Remarque 2: Division par zéro:
La division par zéro est impossible mathématiquement.
En pratique les choses ne sont pas si évidentes; voyons des exemples:
Dim
i As Integer = 4 Dim j As Integer = 0TextBox1.Text = (i/j).ToString 'Affiche " +Infini"
Le résultat de l'opération (i/j) qui est un long est directement affiché.
Par contre:
Dim
i As Integer = 4 Dim j As Integer = 0 Dim k As Integer = CType(i / j, Integer) 'retourne une exception (une erreur) Overflow.ExceptionCar le résultat de l'opération est l'infini donc plus grand que MaxValue des Integers.
Il faut donc, si on risque d'avoir la valeur zéro, faire un contrôle avant la division:
If j<>0 Then
k=i/j
End If
|
|
|
|
|