Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3465
| From | Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> |
|---|---|
| Newsgroups | fr.comp.lang.python |
| Subject | Re: Usage de ~ qui, ce me semble, veut dire not. |
| Date | 2021-04-11 15:42 +0200 |
| Organization | Université de Strasbourg |
| Message-ID | <87r1jh7x9o.fsf@universite-de-strasbourg.fr.invalid> (permalink) |
| References | <s4udl2$191p$1@gioia.aioe.org> <s4ufvh$8vt$1@gioia.aioe.org> <87v98t85de.fsf@universite-de-strasbourg.fr.invalid> <s4unvh$27b$1@cabale.usenet-fr.net> |
Olivier Miakinen <om+news@miakinen.net> writes: >> Les autres opérations apparentées sont & | ^ (autres opérations binaires >> bit-à-bit : "and" "or" "xor"), ainsi que << et >> (décalages). Exercice >> pour le lecteur : pourquoi est-ce que "-1 >> d" vaut -1 quelle que soit >> la valeur de d ? > > Je suppose que le décalage à droite propage le bit de signe, afin que > "-6 >> 1" vaille 3 tout comme "6 >> 1" vaut 3. Mais existe-t-il un type > d'entier non signé ? Un truc qui ferait que "unsigned(-1)" vaudrait un > de moins qu'une grande puissance de 2 ? Ton explication est correcte : en Python tous les entiers sont signés, et tous les décalages "à droite" s'effectuent avec "extension de signe" (le bit le plus à droite est répliqué). Dans -1 tous les bits sont à 1, et donc le restent lors du décalage. (Juste un truc, pour être sûr : le "bit de signe" est une expression correcte -- le bit de poids fort, le plus à gauche, est effectivement 1 pour les entiers négatifs -- mais il vaut mieux éviter les confusions avec la représentation "signed-magnitude", celle qui a deux représentations de zéro.) Et non, il n'y a pas d'entiers non signés en Python, ce qui n'a pas vraiment de conséquence pratique, puisque tous les entiers sont de précision arbitraire. Si on utilise uniquement des entiers positifs et qu'on effectue des décalages, le résultat restera toujours positif, on ne risque pas de surprise. Pour avoir 2^n-1 on fait "2 ** n - 1". Note que la définition du langage précise : "A right shift by n bits is defined as floor division by pow(2,n). A left shift by n bits is defined as multiplication with pow(2,n)." Au passage, puisqu'on parlait de ~ la doc dit : "The unary ~ (invert) operator yields the bitwise inversion of its integer argument. The bitwise inversion of x is defined as -(x+1). It only applies to integral numbers." Tout cela dans : https://docs.python.org/3/reference/expressions.html -- et si vous trouvez bizarre qu'on "réduise" les opérations binaires à des opérations arithmétiques, vous avez toute ma sympathie. Enfin, pour ceux que la discussion rend perplexe : il y a deux façons de décaler à droite. Le décalage "arithmétique" recopie le bit de poids fort, le décalage "logique" le met à zéro (ce sont respectivement les instructions SAR et SHR sur x86). En C (entre autres), on utilise l'une ou l'autre selon le type de l'entier. Ainsi : x = -1; y = x >> 1; donnera à y une valeur différente selon que x est signé ou pas. Rien de tout cela en Python : tout est signé, le décalage est toujours arithmétique, il n'y a pas d'overflow, division et modulo sont corrects, etc. C'est reposant, tant qu'on ne s'occupe pas de performance ou d'occupation mémoire. -- Alain.
Back to fr.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
Usage de ~ qui, ce me semble, veut dire not. Dominique <zzz@aol.com.invalid> - 2021-04-11 10:57 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Dominique <zzz@aol.com.invalid> - 2021-04-11 11:36 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2021-04-11 11:51 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-04-11 12:47 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 13:53 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2021-04-11 14:03 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 14:39 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2021-04-11 14:57 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 15:20 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Dominique <zzz@aol.com.invalid> - 2021-04-11 17:34 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 17:59 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-04-11 15:42 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 16:11 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 16:31 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-04-11 19:43 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2021-04-11 19:43 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-04-11 23:04 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2021-04-11 11:47 +0200
Re: Usage de ~ qui, ce me semble, veut dire not. Dominique <zzz@aol.com.invalid> - 2021-04-11 17:35 +0200
csiph-web