À QUOI ÇA SERT ?
Les opérateurs permettent de transformer, comparer et combiner les valeurs.
En développement bas niveau, les opérateurs bit à bit sont particulièrement importants car beaucoup d’API représentent plusieurs états dans un seul entier.
1. OPÉRATEURS ARITHMÉTIQUES
Code: Select all
+
-
*
/
%
Code: Select all
int a{10};
int b{3};
int sum = a + b;
int remainder = a % b;
Code: Select all
10 / 3
Pas 3.333...
2. INCRÉMENTATION
Code: Select all
++i;
i++;
Code: Select all
int i{5};
int x{++i};
Post-incrément :
Code: Select all
int i{5};
int x{i++};
3. COMPARAISONS
Code: Select all
==
!=
<
<=
>
>=
Code: Select all
if (size == 0)
{
}
Code: Select all
=
Code: Select all
==
4. OPÉRATEURS LOGIQUES
Code: Select all
&&
||
!
Code: Select all
if (connected && authenticated)
{
}
5. SHORT-CIRCUIT
Très important.
Code: Select all
if (ptr != nullptr && ptr->value == 10)
{
}
Donc :
Code: Select all
ptr->value
Sans short-circuit, on provoquerait un accès mémoire invalide.
6. OPÉRATEURS BIT À BIT
Code: Select all
&
|
^
~
<<
>>
Supposons :
Code: Select all
00000101
Exemple :
bit 0 = READ
bit 1 = WRITE
bit 2 = EXECUTE
Définition :
Code: Select all
constexpr unsigned READ = 1u << 0;
constexpr unsigned WRITE = 1u << 1;
constexpr unsigned EXECUTE = 1u << 2;
Code: Select all
READ = 00000001
WRITE = 00000010
EXECUTE = 00000100
7. ACTIVER PLUSIEURS FLAGS
Code: Select all
unsigned flags = READ | WRITE;
Code: Select all
00000001
OR
00000010
=
00000011
8. TESTER UN FLAG
Code: Select all
if ((flags & WRITE) != 0)
{
// WRITE actif
}
9. DÉSACTIVER UN FLAG
Code: Select all
flags &= ~WRITE;
Puis & conserve les autres bits.
10. XOR
Code: Select all
flags ^= READ;
- 0 devient 1 ;
- 1 devient 0.
11. DÉCALAGES
Code: Select all
1u << 5
C’est très utile pour créer des masques.
Exemple :
Code: Select all
constexpr std::uint32_t FLAG_INTERRUPT = 1u << 7;
12. UTILISATION RÉELLE
Les flags existent partout :
Windows :
Code: Select all
GENERIC_READ | GENERIC_WRITE
Code: Select all
PROT_READ | PROT_WRITE
Code: Select all
O_CREAT | O_RDWR
flags d’IRP, registres, permissions, états matériels.
Donc quand tu écris :
Code: Select all
O_CREAT | O_RDWR
À RETENIR
Les opérateurs bit à bit ne sont pas juste une curiosité du langage.
Ils sont un outil quotidien en :
- système ;
- drivers ;
- réseau ;
- protocoles ;
- reverse engineering ;
- programmation matérielle.
