je débute en java et je cherche un exemple pour tester les bit a 1 ou 0 d'un
ocect en java, en c j'ai pas de probleme, maisj'ai pas le
meme comportement en java.
genre
char ch=0xa7; // 1010 0111
afficher via une boucle en fonction de l'indice bit a 1
ou bit a 0
J'ai fait des recherches avec google, mais j'ai rien trouver de concluant,
je lance un appel a pro du langage
Remarquez, l'exemple de ma doc (PDF Borland JBuilder) ne compile pas !
short i = 13; //i a la valeur 0000000000001101 i = i << 2; //i a la valeur 0000000000110100
Normalement, << renvoie un int, sauf si l'une des opérandes est un long.
On pourrait donc se dire qu'il s'agit d'un pb de conversion implicite de int en short (qui n'est pas autorisée, évidemment).
En faisant i = (short)(i << 2); ça passe.
i <<= 2; passe aussi, d'ailleurs, ce qui fait que ce n'est donc pas exactement équivalent à i = i << 2; contrairement à ce que prétendent les docs. -- Éric Jacoboni, né il y a 1390128264 secondes
Pierre Maurette <maurette.pierre@free.fr> writes:
Remarquez, l'exemple de ma doc (PDF Borland JBuilder) ne compile pas !
short i = 13; //i a la valeur 0000000000001101
i = i << 2; //i a la valeur 0000000000110100
Normalement, << renvoie un int, sauf si l'une des opérandes est un
long.
On pourrait donc se dire qu'il s'agit d'un pb de conversion implicite
de int en short (qui n'est pas autorisée, évidemment).
En faisant i = (short)(i << 2); ça passe.
i <<= 2; passe aussi, d'ailleurs, ce qui fait que ce n'est donc pas
exactement équivalent à i = i << 2; contrairement à ce que prétendent
les docs.
--
Éric Jacoboni, né il y a 1390128264 secondes
Remarquez, l'exemple de ma doc (PDF Borland JBuilder) ne compile pas !
short i = 13; //i a la valeur 0000000000001101 i = i << 2; //i a la valeur 0000000000110100
Normalement, << renvoie un int, sauf si l'une des opérandes est un long.
On pourrait donc se dire qu'il s'agit d'un pb de conversion implicite de int en short (qui n'est pas autorisée, évidemment).
En faisant i = (short)(i << 2); ça passe.
i <<= 2; passe aussi, d'ailleurs, ce qui fait que ce n'est donc pas exactement équivalent à i = i << 2; contrairement à ce que prétendent les docs. -- Éric Jacoboni, né il y a 1390128264 secondes
Pierre Maurette
Eric Jacoboni typa:
Pierre Maurette writes:
Remarquez, l'exemple de ma doc (PDF Borland JBuilder) ne compile pas !
short i = 13; //i a la valeur 0000000000001101 i = i << 2; //i a la valeur 0000000000110100
Normalement, << renvoie un int, sauf si l'une des opérandes est un long. Oui. La spécification du langage est claire ($15.19, puis $5.6.1) même
si un peu touffue. Tout est précisé, y compris bien sûr le comportement par rapport au signe. Il est normal que ça compile avec int et long, et que ce soit refusé avec byte, short, et char.
<cit Doc Borland> Il y a deux types dopérateurs au niveau bits : opérateurs de décalage et opérateurs booléens. Les opérateurs de décalage permettent de décaler les chiffres binaires dun entier vers la droite ou vers la gauche. Etudiez lexemple suivant (le type entier short est utilisé à la place du type int pour plus de concision) : short i = 13; //i a la valeur 0000000000001101 i = i << 2; //i a la valeur 0000000000110100 Dans la deuxième ligne, lopérateur de décalage des bits décale tous les bits de i de deux positions vers la gauche. </cit> En fait, le gars, il a eu la flemme de se taper les 32 bits, il est passé en short sans faire tourner le code. Me rappelle quelqu'un, ce gars-là ...
On pourrait donc se dire qu'il s'agit d'un pb de conversion implicite de int en short (qui n'est pas autorisée, évidemment).
En faisant i = (short)(i << 2); ça passe.
i <<= 2; passe aussi, d'ailleurs, ce qui fait que ce n'est donc pas exactement équivalent à i = i << 2; contrairement à ce que prétendent les docs. <cit $15.26.2>
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once. </cit> Heureusement, sinon il serait difficile d'utiliser short <<= value; Ou mettre le cast? ;-)
J'ajoute que tout ça est satisfaisant,ça permet de faire par exemple sans ambiguïté des trucs comme : short s; int i = s << 8; -- Pierre
Eric Jacoboni <jaco@neottia.net> typa:
Pierre Maurette <maurette.pierre@free.fr> writes:
Remarquez, l'exemple de ma doc (PDF Borland JBuilder) ne compile pas !
short i = 13; //i a la valeur 0000000000001101
i = i << 2; //i a la valeur 0000000000110100
Normalement, << renvoie un int, sauf si l'une des opérandes est un
long.
Oui. La spécification du langage est claire ($15.19, puis $5.6.1) même
si un peu touffue. Tout est précisé, y compris bien sûr le
comportement par rapport au signe. Il est normal que ça compile avec
int et long, et que ce soit refusé avec byte, short, et char.
<cit Doc Borland>
Il y a deux types dopérateurs au niveau bits : opérateurs de décalage
et opérateurs booléens. Les opérateurs de décalage permettent de
décaler les chiffres binaires dun entier vers la droite ou vers la
gauche. Etudiez lexemple suivant (le type entier short est utilisé à
la place du type int pour plus de concision) :
short i = 13; //i a la valeur 0000000000001101
i = i << 2; //i a la valeur 0000000000110100
Dans la deuxième ligne, lopérateur de décalage des bits décale tous
les bits de i de deux positions vers la gauche.
</cit>
En fait, le gars, il a eu la flemme de se taper les 32 bits, il est
passé en short sans faire tourner le code. Me rappelle quelqu'un, ce
gars-là ...
On pourrait donc se dire qu'il s'agit d'un pb de conversion implicite
de int en short (qui n'est pas autorisée, évidemment).
En faisant i = (short)(i << 2); ça passe.
i <<= 2; passe aussi, d'ailleurs, ce qui fait que ce n'est donc pas
exactement équivalent à i = i << 2; contrairement à ce que prétendent
les docs.
<cit $15.26.2>
A compound assignment expression of the form E1 op= E2 is equivalent
to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1
is evaluated only once.
</cit>
Heureusement, sinon il serait difficile d'utiliser short <<= value;
Ou mettre le cast? ;-)
J'ajoute que tout ça est satisfaisant,ça permet de faire par exemple
sans ambiguïté des trucs comme :
short s;
int i = s << 8;
--
Pierre
Remarquez, l'exemple de ma doc (PDF Borland JBuilder) ne compile pas !
short i = 13; //i a la valeur 0000000000001101 i = i << 2; //i a la valeur 0000000000110100
Normalement, << renvoie un int, sauf si l'une des opérandes est un long. Oui. La spécification du langage est claire ($15.19, puis $5.6.1) même
si un peu touffue. Tout est précisé, y compris bien sûr le comportement par rapport au signe. Il est normal que ça compile avec int et long, et que ce soit refusé avec byte, short, et char.
<cit Doc Borland> Il y a deux types dopérateurs au niveau bits : opérateurs de décalage et opérateurs booléens. Les opérateurs de décalage permettent de décaler les chiffres binaires dun entier vers la droite ou vers la gauche. Etudiez lexemple suivant (le type entier short est utilisé à la place du type int pour plus de concision) : short i = 13; //i a la valeur 0000000000001101 i = i << 2; //i a la valeur 0000000000110100 Dans la deuxième ligne, lopérateur de décalage des bits décale tous les bits de i de deux positions vers la gauche. </cit> En fait, le gars, il a eu la flemme de se taper les 32 bits, il est passé en short sans faire tourner le code. Me rappelle quelqu'un, ce gars-là ...
On pourrait donc se dire qu'il s'agit d'un pb de conversion implicite de int en short (qui n'est pas autorisée, évidemment).
En faisant i = (short)(i << 2); ça passe.
i <<= 2; passe aussi, d'ailleurs, ce qui fait que ce n'est donc pas exactement équivalent à i = i << 2; contrairement à ce que prétendent les docs. <cit $15.26.2>
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once. </cit> Heureusement, sinon il serait difficile d'utiliser short <<= value; Ou mettre le cast? ;-)
J'ajoute que tout ça est satisfaisant,ça permet de faire par exemple sans ambiguïté des trucs comme : short s; int i = s << 8; -- Pierre