Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3465

Re: Usage de ~ qui, ce me semble, veut dire not.

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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