Question débutant

2 réponses
Avatar
Lu Do
bonsoir =C3=A0 tous.

je souhaiterais "convertir" une fonction Python en Powershell.

def test(maval):
return maval & 0xffffffff
test(12)=20

j'ai test=C3=A9 avec :
- le shell python > j'ai comme r=C3=A9sultat 12L
> une commande dos en lance le script.Py > rien ne s'affiche.

une ame charitable pourrait, s'il vous plait, m'expliquer :=20
- pourquoi j'ai un L qui s'affiche apr=C3=A8s ma valeur dans le shell pyth=
on ?
- pourquoi rien dans la fenetre dos ?
- que fait le & 0x...... ?
=20
Merci de votre aide.

2 réponses

Avatar
Benoit Izac
Bonjour,

Le 13/05/2016 à 21:06, Lu Do a écrit dans le message
 :

je souhaiterais "convertir" une fonction Python en Powershell.



Convertir ou utiliser un script Python en Powershell ?

def test(maval):
return maval & 0xffffffff
test(12)

j'ai testé avec :
- le shell python > j'ai comme résultat 12L

une commande dos en lance le script.Py > rien ne s'affiche.

une ame charitable pourrait, s'il vous plait, m'expliquer :
- pourquoi j'ai un L qui s'affiche après ma valeur dans le shell python ?



Je n'ai pas se comportement avec Python 3.5.1. Avec 2.7.11 et
0xffffffffffffffff (je suis en 64 bits), j'ai bien la même chose qui
signifie que c'est un long. J'en déduis que tu es avec python2 en
32 bits.

- pourquoi rien dans la fenetre dos ?



Parce que tu ne demandes pas d'afficher le résultat.

Remplace « test(12) » par « print test(12) ».

L'interpréteur interactif renvoie la valeur de retour de la commande
précédente :

1






1
0






0
None
0xffffffff






4294967295
long(12)






12L

- que fait le & 0x...... ?



« 0x » est un préfixe qui indique que ce qui suit est de l'hexadécimal
(0b pour du binaire, 0o pour de l'octal).

« & » est un « ET » binaire :
<https://fr.wikipedia.org/wiki/Alg%C3%A8bre_de_Boole_%28logique%29#Conjonction>
On peut également l'écrire « and ».

Vu que 0xffffffff c'est 32 bits à 1, le résultat est le même que le
nombre entier auquel tu l'associes, sous réserve qu'il soit inférieur
à 2^32 - 1, converti en long (uniquement avec python2 que je connais
mal).

Maintenant, je me demande bien à quoi peut servir une telle fonction si
ce n'est s'assurer que « maval » est sur 32 bits.

--
Benoit Izac
Avatar
Alain Ketterlin
Benoit Izac writes:

[...]
« & » est un « ET » binaire :
<https://fr.wikipedia.org/wiki/Alg%C3%A8bre_de_Boole_%28logique%29#Conjon ction>



Non, c'est un opérateur de manipulation de bits : https://fr.wikipedia .org/wiki/Manipulation_de_bit

On peut également l'écrire « and ».



Non, ce n'est pas du tout la meme chose: and est la conjonction logique
dont tu parles plus haut, et le résultat n'est pas du tout le meme.
D'après la définition du langage
(https://docs.python.org/3.5/reference/expressions.html#boolean-operations)

| The expression x and y first evaluates x; if x is false, its value is
| returned; otherwise, y is evaluated and the resulting value is returned.

Donc "v and 0xffffffff" renverrait v quand il vaut 0, et 0xffffffff
sinon. Par contre "0xffffffff and v" renverra toujours v.

Vu que 0xffffffff c'est 32 bits à 1, le résultat est le mê me que le
nombre entier auquel tu l'associes, sous réserve qu'il soit infà ©rieur
à 2^32 - 1, converti en long (uniquement avec python2 que je connais
mal).



La conversion est implicite de toute façon (et à mon avis on peut
considérer comme un bug de renvoyer un long quand le paramètre es t un
int). Et on peut bien sur appeler cette fonction avec un entier codé s ur
un nombre quelconque de bits.

Maintenant, je me demande bien à quoi peut servir une telle fonction si
ce n'est s'assurer que « maval » est sur 32 bits.



Elle conserve les 32 premiers bits en l'état, et mets à zéro tous les
bits au-delà:

12 & 0xffffffff -> 12
(2**32) & 0xffffffff -> 0
(2**32+1) & 0xffffffff -> 1

-- Alain.