Au secours, mon journal, j'ai été ensorcelé!
Aujourd'hui, j'ai eu (entre autres ;-) ) à coder un simple i=2i-1, sans passer par 2i (pour éviter un bête dépassement de registre, je manipule des ints que je sais positifs).
Et là, j'ai eu comme une torpeur... Et quand je me suis réveillé, l'écran m'affichait fièrement :
i+=--i,i++;
Ce doit être un lutin qui passait par là, et qui s'est emparé de mon clavier. Je ne vois pas d'autre explication, ça ne peut tout de même pas mes mains qui ont tapé ça sur les touches! (Quoi, qu'est-ce qu'il y a avec les pieds?)
Et vous, vous avez déjà eu affaire à ce genre de lutins farceurs?
Postez ici les affres qu'ils vous ont fait subir! Peut-être qu'en s'y mettant tous ensemble, nous parviendrons à les stopper!
S'il n'est pas déjà trop tard...
# Moi je vois pas le problème :)
Posté par cowboy . Évalué à 7.
i=2*i-1;
passerait je pense. En effet, le seul cas limite est le cas ou 2*i = 2^32 (en supposant que tu sois sur 32 bits), car sinon même 2i-1 sera en overflow.
Donc si 2i=2^32, tu as 2i=0 donc i=0-1 = -1 (en signé) = 2^32-1 (en non signé).
Mais j'ai ptet pas tout compris ;)
[^] # Re: Moi je vois pas le problème :)
Posté par CoinKoin . Évalué à 5.
(Comment ça, il était déjà pourri?)
# c'est quoi ?
Posté par fabien . Évalué à 5.
ca me rassure, je vois que j'ai pas tout perdu a propos de cette question.
mais par contre, il y a un truc que je ne comprends pas trop : pourquoi il y a une virgule .. j'avoue que je ne connais pas cette syntaxe ( a part dans un for peut être mais bon...) si tu pouvais m'expliquer ca m'aiderait, merci.
[^] # Re: c'est quoi ?
Posté par Yusei (Mastodon) . Évalué à 5.
[^] # Re: c'est quoi ?
Posté par Pooly (site web personnel) . Évalué à 4.
# Regarde ce qui t'attend :
Posté par Obsidian . Évalué à 9.
En général, on commence par voir des petits lutins, et on finit comme çà :
http://www0.us.ioccc.org/years.html#2004(...)
Et, à ce que l'on dit, c'est incurable ...
Mes condoléances ...
[^] # Re: Regarde ce qui t'attend :
Posté par jms . Évalué à 1.
all work and no play makes jack a dull boy
all work and no play makes jack a dull boy
all work and no play makes jack a dull boy all work and no play makes jack a dull boy 4ll work and no play makes jack a dull b0y all work and no play makes jack a null boy
# ce n'est ni sale ni laid ...
Posté par Mouns (site web personnel) . Évalué à 4.
mais ce n'est pas laid ce que tu as fait, il n'y a rien de mal. et c'est meme plutot bien, tu as eu un rapport charnel avec ton code, ce n'est pas sale.
par contre prévois de mettre un zoli commentaire pour dire ce que cela fait genre i = 2*i-1 => i = (i-1)+(i-1)+1 => i+= --i, i++
il y a 13 ans, j'ai eu une mauvaise surprise avec un bout de code super optimisé en C ... depuis, je colle des commentaires en C et des trucs que je suis sur de comprendre ( genre des explications et ses raisons ;) ).
# i += i--;
Posté par Gilles Crettenand (site web personnel) . Évalué à 4.
Sinon effectivement, c'est un joli morceau ;)
[^] # Re: i += i--;
Posté par theocrite (site web personnel) . Évalué à 2.
[^] # Re: i += i--;
Posté par Matthieu Weber . Évalué à 1.
[^] # Re: i += i--;
Posté par doublehp (site web personnel) . Évalué à 1.
je pense que
i=(i-1)<<2 +1;
est moins risque.
[^] # Re: i += i--;
Posté par Matthieu Weber . Évalué à 3.
i--;
i<<=1;
i++;
Ou encore i=--i<<1,i++
[^] # Re: i += i--;
Posté par gros_rouge . Évalué à 2.
J'y ai pensé également mais l'auteur du journal a précisé qu'il ne voulait pas « passer par 2i ».
# Es-tu un geek?
Posté par Jean-Christophe Berthon (site web personnel) . Évalué à 1.
Ta formule est rigolote mais elle est rigoureusement identique à celle-ci :
i = 2(i - 1) + 1
En C en 1 ligne:
i = 2 * (i - 1) + 1;
C'est quand même plus lisible pour tous non? ;-)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.