63 votes

Pourquoi std::bit_width renvoie 0 pour la valeur 0, ne devrait-il pas renvoyer 1 ?

std::bit_width trouve les bits minimum requis pour représenter un nombre entier x sous la forme de 1+floor(log(x))

Pourquoi std::bit_width renvoie 0 pour la valeur 0 ? Ne devrait-il pas retourner 1, puisque le nombre de bits requis pour représenter 0 est 1 ?

De plus, je pense que le 1 dans la formule est un décalage.

16voto

Mehrdad Points 70493

Parce que mathématiquement, cela a du sens :

 bit_width(x) = log2(round_up_to_nearest_integer_power_of_2(x + 1))
bit_width(0) = log2(round_up_to_nearest_integer_power_of_2(0 + 1))
             = log2(1)
             = 0

Prograide.com

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.

Powered by:

X