Opérateurs, conversions et priorité

Salut ce forum apprends les bases du c++

Moderator: Rick

Post Reply
Hydraxx
Site Admin
Posts: 114
Joined: Mon Jan 12, 2026 4:04 pm
Location: France
Contact:

Opérateurs, conversions et priorité

Post by Hydraxx »

OPÉRATEURS ET MANIPULATION DES BITS

À 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

+
-
*
/
%
Exemple :

Code: Select all

int a{10};
int b{3};

int sum = a + b;
int remainder = a % b;
Avec des entiers :

Code: Select all

10 / 3
donne 3.

Pas 3.333...


2. INCRÉMENTATION

Code: Select all

++i;
i++;
Pré-incrément :

Code: Select all

int i{5};
int x{++i};
i devient 6 et x reçoit 6.

Post-incrément :

Code: Select all

int i{5};
int x{i++};
x reçoit 5 puis i devient 6.


3. COMPARAISONS

Code: Select all

==
!=
<
<=
>
>=
Exemple :

Code: Select all

if (size == 0)
{
}
Attention :

Code: Select all

=
est une affectation.

Code: Select all

==
est une comparaison.


4. OPÉRATEURS LOGIQUES

Code: Select all

&&
||
!
Exemple :

Code: Select all

if (connected && authenticated)
{
}

5. SHORT-CIRCUIT


Très important.

Code: Select all

if (ptr != nullptr && ptr->value == 10)
{
}
Si ptr vaut nullptr, la deuxième expression n’est pas évaluée.

Donc :

Code: Select all

ptr->value
n’est jamais exécuté.

Sans short-circuit, on provoquerait un accès mémoire invalide.


6. OPÉRATEURS BIT À BIT

Code: Select all

&
|
^
~
<<
>>
Ils travaillent sur les bits.

Supposons :

Code: Select all

00000101
Chaque bit peut représenter un état.

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;
Résultat :

Code: Select all

READ    = 00000001
WRITE   = 00000010
EXECUTE = 00000100

7. ACTIVER PLUSIEURS FLAGS

Code: Select all

unsigned flags = READ | WRITE;
OR :

Code: Select all

00000001
OR
00000010
=
00000011
Les deux bits sont actifs.


8. TESTER UN FLAG

Code: Select all

if ((flags & WRITE) != 0)
{
    // WRITE actif
}
AND garde uniquement les bits communs.


9. DÉSACTIVER UN FLAG

Code: Select all

flags &= ~WRITE;
~ inverse les bits du masque.

Puis & conserve les autres bits.


10. XOR

Code: Select all

flags ^= READ;
XOR bascule le bit :
  • 0 devient 1 ;
  • 1 devient 0.

11. DÉCALAGES

Code: Select all

1u << 5
donne un entier avec le bit 5 activé.

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
mmap Linux :

Code: Select all

PROT_READ | PROT_WRITE
open Linux :

Code: Select all

O_CREAT | O_RDWR
Drivers :

flags d’IRP, registres, permissions, états matériels.

Donc quand tu écris :

Code: Select all

O_CREAT | O_RDWR
tu combines plusieurs bits dans une seule valeur entière.


À 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.

Return to “Bases du C++”

Who is online

Users browsing this forum: No registered users and 1 guest