OVH Cloud OVH Cloud

Opération bitwise

15 réponses
Avatar
Gloops
Bonjour tout le monde,

Lorsque je lis la description de l'op=E9rateur bitwise AND (&) =E0 l'adre=
sse=20
http://msdn.microsoft.com/fr-fr/library/z0zec0b2.aspx
et que je cherche =E0 la mettre en =9Cuvre, j'en viens =E0 me demander si=
elle=20
est valable sous C#.

En effet, si je tape le code suivant :

ushort usKS =3D (ushort) 0x91;
ushort usScroll =3D (ushort) 0x91;
usKS =3D usKS & usScroll;

histoire de ne retenir que le bit utile dans la premi=E8re variable si=20
elle contenait aussi autre chose (=E0 supposer qu'on l'ait initialis=E9e =

diff=E9remment, mais chaque chose en son temps),

on me jette =E0 la troisi=E8me ligne en me disant
Error 1 Cannot implicitly convert type 'int' to 'ushort'. An explicit=20
conversion exists (are you missing a cast?)=09
(CS0266)

Alors c'est quoi, le "cast" que je "miss" ?
J'ai pourtant bien l'impression d'avoir tout d=E9clar=E9 en ushort (enfin=
du=20
moins les variables que je mentionne ici), o=F9 est-ce qu'on me trouve un=
=20
int ?

J'aurais laiss=E9 tomber un vilebrequin sur la route ?

Au d=E9part c'=E9tait un UInt16 que j'avais =E0 filtrer, et puis comme l'=
aide=20
de l'op=E9rateur "&" utilisait des ushort dans son exemple j'ai fait=20
l'op=E9ration avec des ushort histoire d'essayer d'y voir clair. Vi, ben =

=E7a sera pour le prochain =E9pisode.

Je pr=E9cise que j'ai utilis=E9 la commande Build / Rebuild solution, et =
que=20
j'ai obtenu la m=EAme erreur sur la m=EAme ligne.

5 réponses

1 2
Avatar
Gloops
Patrice a écrit, le 23/11/2009 13:44 :
Donc, si on a deux opérandes de même taille et un résultat de ta ille
double, j'ai comme l'impression que l'explication serait à chercher du
côté de l'implémentation, en l'occurrence sous csharp ?



Ou peut-être d'abord du côté du code MSIL sous-jacent ou de la sp éc du
langage ? Pour l'instant, je n'ai pas encore trouvé ou ce point parti culier
est documenté...



J'avoue que je ne me représentais pas, au départ, où allait nous am ener
ma question.
Bon, pour le moment, on va juste tâcher de se garder un neurone pour se
rappeler qu'une combinaison bit à bit, en csharp, peut donner un
résultat de taille différente des données de départ (et qu'en cas de
doute on a des fonctions comme typename pour en avoir le cœur net).

Et puis le jour où l'éclair jaillira sur l'explication, ça va bien finir
par se savoir :)

Merci en tout cas d'avoir éclairé ma lanterne.
Avatar
Christophe Lephay
"Gloops" a écrit dans le message de groupe de
discussion : #
Bon, pour le moment, on va juste tâcher de se garder un neurone pour se
rappeler qu'une combinaison bit à bit, en csharp, peut donner un résultat
de taille différente des données de départ (et qu'en cas de doute on a des
fonctions comme typename pour en avoir le cœur net).

Et puis le jour où l'éclair jaillira sur l'explication, ça va bien finir
par se savoir :)



Pour être plus précis dans la formulation, ce serait plutôt que les
opérateurs bit à bit ne sont définis que pour les int, les ushort étant
convertis implicitement en int lorsqu'on leur applique l'opérateur.
Avatar
Gloops
Christophe Lephay a écrit, le 24/11/2009 06:23 :
Pour être plus précis dans la formulation, ce serait plutôt que l es
opérateurs bit à bit ne sont définis que pour les int, les ushort étant
convertis implicitement en int lorsqu'on leur applique l'opérateur.



J'ai l'impression que ça, ce n'est pas précisé ici
http://msdn.microsoft.com/fr-fr/library/sbf85k1c%28VS.80%29.aspx

Il m'avait semblé avoir cité un document qui indiquait sur quels type s
était défini l'opérateur, mais peut-être bien que c'était pour
l'assembleur finalement (d'ailleurs c'est un peu logique, si j'avais
trouvé une doc je l'aurais appliquée donc on n'aurait pas eu tout ç a à
raconter).

Est-ce qu'on trouve une doc plus complète à ce sujet, que j'aurais ma l
cherchée, ou c'est des trucs qu'il faut savoir, comme ça, en les ayan t
acquis au hasard des lectures ?
Avatar
Christophe Lephay
"Gloops" a écrit dans le message de groupe de
discussion : #II$
Est-ce qu'on trouve une doc plus complète à ce sujet, que j'aurais mal
cherchée, ou c'est des trucs qu'il faut savoir, comme ça, en les ayant
acquis au hasard des lectures ?



Trouvé ça "Any operation performed on types sbyte, byte, short, or ushort
return int values" ici http://www.csharp-station.com/tutorials/Lesson02.aspx
Avatar
Gloops
Christophe Lephay a écrit, le 25/11/2009 08:11 :
"Gloops" a écrit dans le message de group e
de discussion : #II$
Est-ce qu'on trouve une doc plus complète à ce sujet, que j'aurais mal
cherchée, ou c'est des trucs qu'il faut savoir, comme ça, en les a yant
acquis au hasard des lectures ?



Trouvé ça "Any operation performed on types sbyte, byte, short, or
ushort return int values" ici
http://www.csharp-station.com/tutorials/Lesson02.aspx



Ah, ben on dirait que voilà une piste intéressante :)
1 2