Salut,
Je suis tombé sur une fonction qui prend en paramètre un int n étant la taille d'une base (8 octales,16 héxa etc..) et en fait une sortie en string. Rien de fôlichon jusque là. Voici le code (Désolé je ne sais pas utiliser la coloration syntaxique:
Ma question comporte le ~(!n), si la valeur est positive il renvoi -1 grâce à l'overflow du i0nt non-signé et fait tourner la boucle, pas de soucis ! Façon un peu nerd d'initialiser sa variable pour faire "skills". Seulement si la valeur de n est à 0 alors, l'opération renvoit -2, comment on arrive à en inversant chaque bits de 0 ? Chaque bits en binaire n'est-il pas à zero ? Ca décalerait le pointeur de s - 1 soit.. Segfault ou bus error. Le mec qui a fait ça est une grosse tanche ou suis-je trop loin de la lumière pour comprendre les rois du bitwise ?
Ce ~(!n) m'énerve. Expliquez moi.
Des bisous !
Je suis tombé sur une fonction qui prend en paramètre un int n étant la taille d'une base (8 octales,16 héxa etc..) et en fait une sortie en string. Rien de fôlichon jusque là. Voici le code (Désolé je ne sais pas utiliser la coloration syntaxique:
Code:
char *get_base(int n)
{
int i;
char *s;
i = ~(!n);
s = strnew(n + 1);
while (++i < n)
*(s + i) = (i < 10) ? ('0' + i) : ('A' + (i - 10));
return (s);
}
Ce ~(!n) m'énerve. Expliquez moi.
Des bisous !