Je comprends mal le comportement de ~ (le tilde) :
soit a,b=5,7
a>b False normal
a>~b True, résultat attendu
b<a False, normal, mais
b<~a False aussi, et lÍ , je ne comprends pas. Voyez-vous pourquoi j'ai
ce résultat inattendu ? Je suppose que, Í la question « b pas inférieur
Í a », je devrais obtenir True...
En vous souhaitant un beau dimanche,
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
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.
C'est assez classique pour Í peu près tous les langages dans lesquels les entiers signés sont représentés en « complément Í 2 » et en taille fixe. Mais je vois dans la suite de ta réponse que dans Python les entiers ne sont pas contraints Í une taille fixe.
(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.)
Oui, en effet. Cette repérsentation étant par exemple IEEE 754. Est-ce que les réels en Python sont représentés en IEEE 754 ?
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.
Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: (34, 'Numerical result out of range')
[...] 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.
Oui. J'avais un Í priori négatif au sujet de Python avant de m'y mettre, mais maintenant au contraire je suis ravi d'avoir franchi le pas, et « reposant » est vraiment le qualificatif qui convient. Merci de tes réponses. -- Olivier Miakinen
Le 11/04/2021 15:42, Alain Ketterlin a écrit :
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.
C'est assez classique pour Í peu près tous les langages dans lesquels les
entiers signés sont représentés en « complément Í 2 » et en taille fixe.
Mais je vois dans la suite de ta réponse que dans Python les entiers ne
sont pas contraints Í une taille fixe.
(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.)
Oui, en effet. Cette repérsentation étant par exemple IEEE 754. Est-ce
que les réels en Python sont représentés en IEEE 754 ?
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.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: (34, 'Numerical result out of range')
[...]
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.
Oui. J'avais un Í priori négatif au sujet de Python avant de m'y mettre,
mais maintenant au contraire je suis ravi d'avoir franchi le pas, et
« reposant » est vraiment le qualificatif qui convient.
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.
C'est assez classique pour Í peu près tous les langages dans lesquels les entiers signés sont représentés en « complément Í 2 » et en taille fixe. Mais je vois dans la suite de ta réponse que dans Python les entiers ne sont pas contraints Í une taille fixe.
(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.)
Oui, en effet. Cette repérsentation étant par exemple IEEE 754. Est-ce que les réels en Python sont représentés en IEEE 754 ?
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.
Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: (34, 'Numerical result out of range')
[...] 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.
Oui. J'avais un Í priori négatif au sujet de Python avant de m'y mettre, mais maintenant au contraire je suis ravi d'avoir franchi le pas, et « reposant » est vraiment le qualificatif qui convient. Merci de tes réponses. -- Olivier Miakinen
Olivier Miakinen
Le 11/04/2021 16:11, je répondais Í Alain Ketterlin :
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.
Oui. J'avais un Í priori négatif au sujet de Python avant de m'y mettre, mais maintenant au contraire je suis ravi d'avoir franchi le pas, et « reposant » est vraiment le qualificatif qui convient. Merci de tes réponses.
Et pardon pour avoir constamment répondu sur autre chose que l'opérateur « ~ », malgré le titre du fil et tes efforts méritoires pour toujours y revenir. ;-) -- Olivier Miakinen
Le 11/04/2021 16:11, je répondais Í Alain Ketterlin :
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.
Oui. J'avais un Í priori négatif au sujet de Python avant de m'y mettre,
mais maintenant au contraire je suis ravi d'avoir franchi le pas, et
« reposant » est vraiment le qualificatif qui convient.
Merci de tes réponses.
Et pardon pour avoir constamment répondu sur autre chose que l'opérateur
« ~ », malgré le titre du fil et tes efforts méritoires pour toujours y
revenir. ;-)
Le 11/04/2021 16:11, je répondais Í Alain Ketterlin :
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.
Oui. J'avais un Í priori négatif au sujet de Python avant de m'y mettre, mais maintenant au contraire je suis ravi d'avoir franchi le pas, et « reposant » est vraiment le qualificatif qui convient. Merci de tes réponses.
Et pardon pour avoir constamment répondu sur autre chose que l'opérateur « ~ », malgré le titre du fil et tes efforts méritoires pour toujours y revenir. ;-) -- Olivier Miakinen
Dominique
Le 11/04/2021 Í 14:03, Benoit Izac a écrit :
Moi je pense que «Â a >> 1 == ~(~a >> 1) » donc vu que «Â -1 == ~0 » et que «Â 0 >> d » vaut toujours 0, «Â ~(~0 >> d) == -1 ».
LÍ , j'avoue avoir décroché depuis un petit moment :-) Je pense que je vais, temporairement, oublier le tilde... Merci Í vous tous, -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es
Le 11/04/2021 Í 14:03, Benoit Izac a écrit :
Moi je pense que «Â a >> 1 == ~(~a >> 1)Â » donc vu que «Â -1 == ~0Â » et
que «Â 0 >> d » vaut toujours 0, «Â ~(~0 >> d) == -1 ».
LÍ , j'avoue avoir décroché depuis un petit moment :-)
Je pense que je vais, temporairement, oublier le tilde...
Merci Í vous tous,
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Moi je pense que «Â a >> 1 == ~(~a >> 1) » donc vu que «Â -1 == ~0 » et que «Â 0 >> d » vaut toujours 0, «Â ~(~0 >> d) == -1 ».
LÍ , j'avoue avoir décroché depuis un petit moment :-) Je pense que je vais, temporairement, oublier le tilde... Merci Í vous tous, -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es
Dominique
Le 11/04/2021 Í 11:47, Benoit Izac a écrit :
Bonjour, Le 11/04/2021 Í 10:57, Dominique a écrit dans le message <s4udl2$191p$Â :
Je comprends mal le comportement de ~ (le tilde) : [ce me semble, veut dire not.]
C'est effectivement tout ce que je comprends de ce qui précède. Not et tilde n'ont pas la même signification. Merci et bonne fin de weekend, -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es
Le 11/04/2021 Í 11:47, Benoit Izac a écrit :
Bonjour,
Le 11/04/2021 Í 10:57, Dominique a écrit dans le message
<s4udl2$191p$1@gioia.aioe.org>Â :
Je comprends mal le comportement de ~ (le tilde) :
C'est effectivement tout ce que je comprends de ce qui précède. Not et tilde n'ont pas la même signification. Merci et bonne fin de weekend, -- Dominique Courriel : dominique point sextant ate orange en France Esto quod es
Olivier Miakinen
Le 11/04/2021 17:34, Dominique a écrit :
Moi je pense que «Â a >> 1 == ~(~a >> 1) » donc vu que «Â -1 == ~0 » et que «Â 0 >> d » vaut toujours 0, «Â ~(~0 >> d) == -1 ».
LÍ , j'avoue avoir décroché depuis un petit moment :-) Je pense que je vais, temporairement, oublier le tilde...
Juste pour essayer de te « raccrocher », un exemple en supposant des entiers sur 16 bits. Si a s'écrit en binaire : 0000000011000001 alors ~a s'écrira en binaire : 1111111100111110 Tous les 0 de l'écriture en binaire deviennent des 1, et tous les 1 deviennent des 0. En Python, avec des entiers de taille illimitée, c'est la même chose sauf que, conceptuellement, il y a une infinité de 0 ou de 1 Í gauche : ...0000000011000001 et : ...1111111100111110 -- Olivier Miakinen
Le 11/04/2021 17:34, Dominique a écrit :
Moi je pense que «Â a >> 1 == ~(~a >> 1)Â » donc vu que «Â -1 == ~0Â » et
que «Â 0 >> d » vaut toujours 0, «Â ~(~0 >> d) == -1 ».
LÍ , j'avoue avoir décroché depuis un petit moment :-)
Je pense que je vais, temporairement, oublier le tilde...
Juste pour essayer de te « raccrocher », un exemple en supposant des
entiers sur 16 bits.
Si a s'écrit en binaire :
0000000011000001
alors ~a s'écrira en binaire :
1111111100111110
Tous les 0 de l'écriture en binaire deviennent des 1, et tous les 1
deviennent des 0.
En Python, avec des entiers de taille illimitée, c'est la même chose
sauf que, conceptuellement, il y a une infinité de 0 ou de 1 Í gauche :
...0000000011000001
et :
...1111111100111110
Moi je pense que «Â a >> 1 == ~(~a >> 1) » donc vu que «Â -1 == ~0 » et que «Â 0 >> d » vaut toujours 0, «Â ~(~0 >> d) == -1 ».
LÍ , j'avoue avoir décroché depuis un petit moment :-) Je pense que je vais, temporairement, oublier le tilde...
Juste pour essayer de te « raccrocher », un exemple en supposant des entiers sur 16 bits. Si a s'écrit en binaire : 0000000011000001 alors ~a s'écrira en binaire : 1111111100111110 Tous les 0 de l'écriture en binaire deviennent des 1, et tous les 1 deviennent des 0. En Python, avec des entiers de taille illimitée, c'est la même chose sauf que, conceptuellement, il y a une infinité de 0 ou de 1 Í gauche : ...0000000011000001 et : ...1111111100111110 -- Olivier Miakinen
Alain Ketterlin
Olivier Miakinen <om+ writes: [...]
Oui, en effet. Cette repérsentation étant par exemple IEEE 754. Est-ce que les réels en Python sont représentés en IEEE 754 ?
Oui et non. En théorie, la règle est : "These represent machine-level double precision floating point numbers. You are at the mercy of the underlying machine architecture (and C or Java implementation) for the accepted range and handling of overflow." (https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy) Et dans la bibliothèque standard, il est dit que : "Floating point numbers are usually implemented using double in C" (https://docs.python.org/3/library/stdtypes.html#typesnumeric) Donc, en pratique, oui c'est IEEE 754 (double précision). Idem pour les nombres complexes. -- Alain.
Olivier Miakinen <om+news@miakinen.net> writes:
[...]
Oui, en effet. Cette repérsentation étant par exemple IEEE 754. Est-ce
que les réels en Python sont représentés en IEEE 754 ?
Oui et non. En théorie, la règle est :
"These represent machine-level double precision floating point numbers.
You are at the mercy of the underlying machine architecture (and C or
Java implementation) for the accepted range and handling of overflow."
Oui, en effet. Cette repérsentation étant par exemple IEEE 754. Est-ce que les réels en Python sont représentés en IEEE 754 ?
Oui et non. En théorie, la règle est : "These represent machine-level double precision floating point numbers. You are at the mercy of the underlying machine architecture (and C or Java implementation) for the accepted range and handling of overflow." (https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy) Et dans la bibliothèque standard, il est dit que : "Floating point numbers are usually implemented using double in C" (https://docs.python.org/3/library/stdtypes.html#typesnumeric) Donc, en pratique, oui c'est IEEE 754 (double précision). Idem pour les nombres complexes. -- Alain.
Benoit Izac
Bonjour, Le 11/04/2021 Í 15:42, Alain Ketterlin a écrit dans le message  :
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.
Ce n'est pas plutÍ´t le bit le plus Í gauche qui est répliqué ? -- Benoit Izac
Bonjour,
Le 11/04/2021 Í 15:42, Alain Ketterlin a écrit dans le message
<87r1jh7x9o.fsf@universite-de-strasbourg.fr.invalid>Â :
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.
Ce n'est pas plutÍ´t le bit le plus Í gauche qui est répliqué ?
Bonjour, Le 11/04/2021 Í 15:42, Alain Ketterlin a écrit dans le message  :
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.
Ce n'est pas plutÍ´t le bit le plus Í gauche qui est répliqué ? -- Benoit Izac
Alain Ketterlin
Benoit Izac writes: [...]
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.
Ce n'est pas plutÍ´t le bit le plus Í gauche qui est répliqué ?
Si si, bien sÍ»r, merci d'avoir corrigé. -- Alain.
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.
Ce n'est pas plutÍ´t le bit le plus Í gauche qui est répliqué ?
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.
Ce n'est pas plutÍ´t le bit le plus Í gauche qui est répliqué ?
Si si, bien sÍ»r, merci d'avoir corrigé. -- Alain.