Et pourquoi le décalage alors qu'on peut tout simplement multiplier?
Il ne faut pas décaler quand on veut multiplier.
Et ça ne s'utilise qu'avec des entiers?
Oui (voir norme plus bas).
Bref, dans quels cas utilise-t-on le décalage?
AMHA, il n'y a pas de cas où << et >> sont irremplaçables. Les * et /,
Et pourquoi le décalage alors qu'on peut tout simplement multiplier?
Il ne faut pas décaler quand on veut multiplier.
Et ça ne s'utilise qu'avec des entiers?
Oui (voir norme plus bas).
Bref, dans quels cas utilise-t-on le décalage?
AMHA, il n'y a pas de cas où << et >> sont irremplaçables. Les * et /,
Et pourquoi le décalage alors qu'on peut tout simplement multiplier?
Il ne faut pas décaler quand on veut multiplier.
Et ça ne s'utilise qu'avec des entiers?
Oui (voir norme plus bas).
Bref, dans quels cas utilise-t-on le décalage?
AMHA, il n'y a pas de cas où << et >> sont irremplaçables. Les * et /,
Raffaello wrote in
news:cbphjk$ep9$:Ca sert a decaler les bits.
par exemple :
2 en binaire : 00000010
si tu fais 2 << 1
tu as : 00000100, ce qui fait 4.
ou 2 >> 1, ca te donne 00000001, ce qui fai 1.
en fait tu decale tous les bits vers la gauche ou vers la droite du
nombre donner.
Un dernier exemple :
21 = 10101
21 << 1 = 101010 (42)
21 << 2 = 1010100 (84)
...
au final ca revien a une mutiplication par 2 pour chaque decalage.
Et pourquoi le décalage alors qu'on peut tout simplement multiplier?
Et ça ne s'utilise qu'avec des entiers?
Bref, dans quels cas utilise-t-on le décalage?
Raffaello <xipe@plurali.net> wrote in
news:cbphjk$ep9$1@biggoron.nerim.net:
Ca sert a decaler les bits.
par exemple :
2 en binaire : 00000010
si tu fais 2 << 1
tu as : 00000100, ce qui fait 4.
ou 2 >> 1, ca te donne 00000001, ce qui fai 1.
en fait tu decale tous les bits vers la gauche ou vers la droite du
nombre donner.
Un dernier exemple :
21 = 10101
21 << 1 = 101010 (42)
21 << 2 = 1010100 (84)
...
au final ca revien a une mutiplication par 2 pour chaque decalage.
Et pourquoi le décalage alors qu'on peut tout simplement multiplier?
Et ça ne s'utilise qu'avec des entiers?
Bref, dans quels cas utilise-t-on le décalage?
Raffaello wrote in
news:cbphjk$ep9$:Ca sert a decaler les bits.
par exemple :
2 en binaire : 00000010
si tu fais 2 << 1
tu as : 00000100, ce qui fait 4.
ou 2 >> 1, ca te donne 00000001, ce qui fai 1.
en fait tu decale tous les bits vers la gauche ou vers la droite du
nombre donner.
Un dernier exemple :
21 = 10101
21 << 1 = 101010 (42)
21 << 2 = 1010100 (84)
...
au final ca revien a une mutiplication par 2 pour chaque decalage.
Et pourquoi le décalage alors qu'on peut tout simplement multiplier?
Et ça ne s'utilise qu'avec des entiers?
Bref, dans quels cas utilise-t-on le décalage?
On Mon, 28 Jun 2004 19:26:28 +0200, Vincent Richard
:peine de se casser la tête...
On utilise << et >> quand on veut vraiment faire du décalage de bits,
i.e. quand on s'intéresse à la structure d'un entier.
Par exemple, si un DWORD (= entier non signé de 32 bits) contient en
fait deux WORD (= entier non signé de 16 bits), le WORD de poids fort
étant "machin" et le WORD de poids faible "truc", on écrira :
WORD machin= mon_DWORD >> 16;
Voire :
WORD machin= mon_DWORD >> (sizeof WORD * CHAR_BIT);
Ce genre de décalage de bits est utilisé également dans certains
algorithmes, comme CRC32.
En résumé, si tu veux faire une multiplication ou une division, tu
utilises * ou /, et tu laisses le compilo se depêtrer. Si un
algorithme parle de décalage de bits, tu utilises << et >>.
On Mon, 28 Jun 2004 19:26:28 +0200, Vincent Richard
<chere-loque.MARRE-DE-LA-PUB@wanadoo.fr.invalid>:
peine de se casser la tête...
On utilise << et >> quand on veut vraiment faire du décalage de bits,
i.e. quand on s'intéresse à la structure d'un entier.
Par exemple, si un DWORD (= entier non signé de 32 bits) contient en
fait deux WORD (= entier non signé de 16 bits), le WORD de poids fort
étant "machin" et le WORD de poids faible "truc", on écrira :
WORD machin= mon_DWORD >> 16;
Voire :
WORD machin= mon_DWORD >> (sizeof WORD * CHAR_BIT);
Ce genre de décalage de bits est utilisé également dans certains
algorithmes, comme CRC32.
En résumé, si tu veux faire une multiplication ou une division, tu
utilises * ou /, et tu laisses le compilo se depêtrer. Si un
algorithme parle de décalage de bits, tu utilises << et >>.
On Mon, 28 Jun 2004 19:26:28 +0200, Vincent Richard
:peine de se casser la tête...
On utilise << et >> quand on veut vraiment faire du décalage de bits,
i.e. quand on s'intéresse à la structure d'un entier.
Par exemple, si un DWORD (= entier non signé de 32 bits) contient en
fait deux WORD (= entier non signé de 16 bits), le WORD de poids fort
étant "machin" et le WORD de poids faible "truc", on écrira :
WORD machin= mon_DWORD >> 16;
Voire :
WORD machin= mon_DWORD >> (sizeof WORD * CHAR_BIT);
Ce genre de décalage de bits est utilisé également dans certains
algorithmes, comme CRC32.
En résumé, si tu veux faire une multiplication ou une division, tu
utilises * ou /, et tu laisses le compilo se depêtrer. Si un
algorithme parle de décalage de bits, tu utilises << et >>.
Michaël Delva wrote:j'ai souvent vu ces opérateurs utilisés pour des entiers, avec le
terme décalage associé, mais je ne sais pas à quoi cela sert
réellement...
Une âme charitable pourrait m'éclairer?
C'est un héritage du C.
Décaler les bits d'un entier a la propriété de multiplier/diviser par
2 puissance N la valeur qu'il représente. Si tu décales à gauche, tu
multiplies, si tu décales à droite tu divises.
Ca ne marche qu'avec des entiers et si l'opérateur est défini pour
autre chose, ça fait quelque-chose de très différent et rarement
comparable.
Attention aussi aux débordements. C'est aussi une manière de ne pas
faire confiance au compilateur pour optimiser des
multiplications/divisions par des puissances de 2 en invoquant
soi-même l'opération de décalage (souvent un mnémonique dédiée du
processeur).
Michaël Delva wrote:
j'ai souvent vu ces opérateurs utilisés pour des entiers, avec le
terme décalage associé, mais je ne sais pas à quoi cela sert
réellement...
Une âme charitable pourrait m'éclairer?
C'est un héritage du C.
Décaler les bits d'un entier a la propriété de multiplier/diviser par
2 puissance N la valeur qu'il représente. Si tu décales à gauche, tu
multiplies, si tu décales à droite tu divises.
Ca ne marche qu'avec des entiers et si l'opérateur est défini pour
autre chose, ça fait quelque-chose de très différent et rarement
comparable.
Attention aussi aux débordements. C'est aussi une manière de ne pas
faire confiance au compilateur pour optimiser des
multiplications/divisions par des puissances de 2 en invoquant
soi-même l'opération de décalage (souvent un mnémonique dédiée du
processeur).
Michaël Delva wrote:j'ai souvent vu ces opérateurs utilisés pour des entiers, avec le
terme décalage associé, mais je ne sais pas à quoi cela sert
réellement...
Une âme charitable pourrait m'éclairer?
C'est un héritage du C.
Décaler les bits d'un entier a la propriété de multiplier/diviser par
2 puissance N la valeur qu'il représente. Si tu décales à gauche, tu
multiplies, si tu décales à droite tu divises.
Ca ne marche qu'avec des entiers et si l'opérateur est défini pour
autre chose, ça fait quelque-chose de très différent et rarement
comparable.
Attention aussi aux débordements. C'est aussi une manière de ne pas
faire confiance au compilateur pour optimiser des
multiplications/divisions par des puissances de 2 en invoquant
soi-même l'opération de décalage (souvent un mnémonique dédiée du
processeur).
Autant que je sache, l'opérateur est présent dans tous les langages
à prétention de programmation système.
Autant que je sache, l'opérateur est présent dans tous les langages
à prétention de programmation système.
Autant que je sache, l'opérateur est présent dans tous les langages
à prétention de programmation système.
En général, quand il y a >> ou <<, il y aurait aussi &, | ou ^ et des
constantes hexadécimales ou octales. On manipule des bits, et non des
valeurs sur l'entier complet.
En général, quand il y a >> ou <<, il y aurait aussi &, | ou ^ et des
constantes hexadécimales ou octales. On manipule des bits, et non des
valeurs sur l'entier complet.
En général, quand il y a >> ou <<, il y aurait aussi &, | ou ^ et des
constantes hexadécimales ou octales. On manipule des bits, et non des
valeurs sur l'entier complet.
En général, quand il y a >> ou <<, il y aurait aussi &, | ou ^ et
des constantes hexadécimales ou octales. On manipule des bits, et
non des valeurs sur l'entier complet.
A ce propos, vous auriez de la doc sur ces symboles?
En général, quand il y a >> ou <<, il y aurait aussi &, | ou ^ et
des constantes hexadécimales ou octales. On manipule des bits, et
non des valeurs sur l'entier complet.
A ce propos, vous auriez de la doc sur ces symboles?
En général, quand il y a >> ou <<, il y aurait aussi &, | ou ^ et
des constantes hexadécimales ou octales. On manipule des bits, et
non des valeurs sur l'entier complet.
A ce propos, vous auriez de la doc sur ces symboles?
writes:Autant que je sache, l'opérateur est présent dans tous les langages
à prétention de programmation système.
Si j'ai bonne memoire, Ada n'a pas de tels operateurs. Et s'il y a un
marche ou Ada a une presence autre qu'anectodique, ce sont les
systemes embarques.
kanze@gabi-soft.fr writes:
Autant que je sache, l'opérateur est présent dans tous les langages
à prétention de programmation système.
Si j'ai bonne memoire, Ada n'a pas de tels operateurs. Et s'il y a un
marche ou Ada a une presence autre qu'anectodique, ce sont les
systemes embarques.
writes:Autant que je sache, l'opérateur est présent dans tous les langages
à prétention de programmation système.
Si j'ai bonne memoire, Ada n'a pas de tels operateurs. Et s'il y a un
marche ou Ada a une presence autre qu'anectodique, ce sont les
systemes embarques.
Cette dernière paragraphe me semble exactement la définition des
opérateurs &, | et ^ en C++. Y compris la mauvaise précédence:-).
Il y a aussi un « not » dans §4.5.6, avec des sémantiques (pour un
type « modular ») qui correspond à ! en C++.
En revanche, je ne trouve pas de décalages, même dans les fonctions
prédéfinies (Appendice A). Mais peut-être je ne sais pas où
chercher.
Cette dernière paragraphe me semble exactement la définition des
opérateurs &, | et ^ en C++. Y compris la mauvaise précédence:-).
Il y a aussi un « not » dans §4.5.6, avec des sémantiques (pour un
type « modular ») qui correspond à ! en C++.
En revanche, je ne trouve pas de décalages, même dans les fonctions
prédéfinies (Appendice A). Mais peut-être je ne sais pas où
chercher.
Cette dernière paragraphe me semble exactement la définition des
opérateurs &, | et ^ en C++. Y compris la mauvaise précédence:-).
Il y a aussi un « not » dans §4.5.6, avec des sémantiques (pour un
type « modular ») qui correspond à ! en C++.
En revanche, je ne trouve pas de décalages, même dans les fonctions
prédéfinies (Appendice A). Mais peut-être je ne sais pas où
chercher.
A ce propos, vous auriez de la doc sur ces symboles?
A ce propos, vous auriez de la doc sur ces symboles?
A ce propos, vous auriez de la doc sur ces symboles?