Comment cela marche-t-il?
L'idée est de faire en sorte que abs(x)
utilise des opérateurs au niveau du bit pour les entiers (en supposant des mots de 32 bits) :
y = x >> 31
(x + y) ^ y // This gives abs(x) (is ^ XOR)?
Comment cela marche-t-il?
L'idée est de faire en sorte que abs(x)
utilise des opérateurs au niveau du bit pour les entiers (en supposant des mots de 32 bits) :
y = x >> 31
(x + y) ^ y // This gives abs(x) (is ^ XOR)?
Cette approche repose sur de nombreux comportements spécifiques à l'implémentation :
x
largeur de 32 bits. Cependant, vous pouvez résoudre ce problème par x >> (sizeof(x) * CHAR_BIT - 1)
Exemple avec 3 bits :
101 -> x = -3
111 -> x >> 2
101 + 111 = 100 -> x + y
100 XOR 111 -> 011 -> 3
Ce n'est pas portable.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.