Loading lang_c_09_bitwise...

enib_small.png LANG-C 09_Bitwise — Opérations bit-à-bit

Il existe des contextes applicatifs dans lesquels les entiers manipulés ne sont pas considérés pour la valeur arithmétique qu'ils représentent mais au contraire pour chacun de leurs bits constitutifs pris isolément (ou par sous-ensembles).
C'est le cas notamment lorsqu'il est question de faire interagir le programme avec des composants matériels pour lesquels chaque bit représente une consigne ou un état (ceci sera étudié dans les matières S5-MIP et S6-MIP de l'ENIB).
Le langage C introduit à ce propos un jeu d'opérations bit-à-bit (bitwise) qui vient compléter le jeu d'opérations arithmétiques usuelles et qui s'utilisent de la même façon.
Ces opérations permettent de contrôler très efficacement les bits constitutifs des entiers.
(https://en.cppreference.com/w/c/language/operator_arithmetic)
Cette étude permettra également de constater la représentation binaire utilisée sur les entiers signés et non-signés.

Mise en place du programme d'expérimentation
{1 #shift } Les opérations de décalage
{2 #combin } Les combinaisons bit-à-bit
{3 #set } Test de bits et forçage à 1
{4 #reset } Complémentation et forçage de bits à 0
{5 #signed } Opérations bits-à-bits sur les entiers signés

Ici s'achève ce chapitre dans lequelle nous avons découvert et expérimenté les opérations bit-à-bit.
Nous avons constaté qu'il ne s'agit ni plus ni moins que d'opérateurs dont l'utilisation est semblable à celle des opérateurs arithmétiques.
Ceux d'entre eux qui attendent deux opérandes peuvent même être combinés avec l'opération d'affectation (
<<=
,
>>=
,
&=
,
|=
,
^=
) tout comme dans le cas des opérations arithmétiques usuelles (
+=
,
-=
,
*=
,
/=
,
%=
).

Ces opérations s'appliquent à des entiers mais ne traitent pas directement de la signification arithmétique de leur valeur ; elles les considèrent plutôt comme des séquences de bits auxquels on applique des opérations logiques élémentaires.
Elles concernent les décalages des motifs de bits vers les poids forts (
<<
) ou les poids faibles (
>>
), leur combinaison selon des opérations et (
&
), ou (
|
) ou ou-exclusif (
^
) ou encore leur complémentation (
~
).
Les usages habituels de ces opérations consistent à tester l'état de quelques bits particuliers d'un entier non-signé, à les forcer à 1 ou à 0 ; ceci est particulièrement utile dans le cadre de programmes qui interagissent avec des composants matériels.
L'usage de telles opérations bit-à-bit sur des entiers signés n'est quasiment jamais justifié et est source d'erreurs.

Code source de l'expérimentation