Opérateurs binaires ( ~
, &
, |
y ^
) opèrent sur la représentation binaire de leurs opérandes promus. De telles opérations peuvent-elles provoquer un comportement indéfini ?
Par exemple, le ~
est défini de cette manière dans la norme C :
6.5.3.3 Opérateurs arithmétiques unaires
Le résultat de la
~
est le complément bit à bit de son opérande (promu) (c'est-à-dire que chaque bit du résultat est activé si et seulement si le bit correspondant de l'opérande converti n'est pas activé). Les promotions d'entiers sont effectuées sur l'opérande, et le résultat a le type promu. Si le type promu est un type non signé, l'expression~E
est équivalent à la valeur maximale représentable dans ce type moinsE
.
Sur toutes les architectures, ~0
produit un motif de bits avec le bit de signe réglé sur 1
et tous les bits de valeur sont mis à 1
. Sur une architecture à complément à un, cette représentation correspond à un zéro négatif. Ce motif binaire peut-il être une représentation piège ?
Existe-t-il d'autres exemples de comportement non défini impliquant de simples opérateurs bit à bit pour des architectures plus courantes ?