Bonjour,
j'ai recement aquis "The C programming language" de B. Kernighan et D.
Ritchie après avoir appris le C à l'aide d'un cours sur internet, dans
le but d'appronfondir mes connaissances, je ne suis pas du tout déçu
car j'ai par exemple enfin compris les ternaires (le rédacteur du cours
que j'avais suivis ne les supportaient pas) mais je bloque sur une
notion nouvelle (pour moi), situé en 2.9 : les "Bitwise operators", je
n'ai absolument rien compris à cette notion, peut-être parce que je lis
le livre en version originale, aussi j'aimerais que quelqu'un
m'explique au moins à quoi cela sert.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pierre Maurette
Bonjour, j'ai recement aquis "The C programming language" de B. Kernighan et D. Ritchie après avoir appris le C à l'aide d'un cours sur internet, dans le but d'appronfondir mes connaissances, je ne suis pas du tout déçu car j'ai par exemple enfin compris les ternaires (le rédacteur du cours que j'avais suivis ne les supportaient pas) mais je bloque sur une notion nouvelle (pour moi), situé en 2.9 : les "Bitwise operators", je n'ai absolument rien compris à cette notion, peut-être parce que je lis le livre en version originale, aussi j'aimerais que quelqu'un m'explique au moins à quoi cela sert.
Il faudrait savoir où vous butez. Je ne connais pas bien le K&R (honte à moi) mais peut-être y a-t-il un hiatus entre le prérequis de cet ouvrage et votre background. Avant de passer au C, il vous faut valider les points suivants:
- Représentation des nombres en binaire naturel. Bien maîtriser quelques évidences: quand on ajoute un 0 à droite, on multiplie par 2 (par 10 en décimal), quand on enlève le chiffre de droite, on divise par 2 (par 10 en décimal). Dualité du bit (le chiffre en binaire) : numérique et logique (vrai/faux). Cette dualité n'existe pas en décimal.
- Notions de représentation des nombres signés.
- Logique combinatoire de base. Le NON, le ET, le OU et le OU EXCLUSIF. Bien voir qu'à coté de la mathématique, ce sont également des notions "de tous les jours". Par exemple le OU EXCLUSIF, c'est "fromage ou dessert", ou "pas (jaune ou rouge)", c'est "pas jaune et pas rouge" ("ni jaune ni rouge")(thèorème de De Morgan). Cette dernière partie est plutôt utile dans l'écriture des conditions.
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée. ET, OU et OU EXCLUSIF sont des opérations qui se font sur chaque bit indépendamment des autres, un traitement parallèle en quelque sorte.
- Vous voyez les notions de masquage et de forçage.
- Vous reprenez le K&R, et appliquez tout ça au C, langage qui cache si bien son déterminisme. Là, vous remarquerez que certaines opérations sont indéterminées en C portable.
-- Pierre Maurette
Bonjour,
j'ai recement aquis "The C programming language" de B. Kernighan et D.
Ritchie après avoir appris le C à l'aide d'un cours sur internet, dans
le but d'appronfondir mes connaissances, je ne suis pas du tout déçu
car j'ai par exemple enfin compris les ternaires (le rédacteur du cours
que j'avais suivis ne les supportaient pas) mais je bloque sur une
notion nouvelle (pour moi), situé en 2.9 : les "Bitwise operators", je
n'ai absolument rien compris à cette notion, peut-être parce que je lis
le livre en version originale, aussi j'aimerais que quelqu'un
m'explique au moins à quoi cela sert.
Il faudrait savoir où vous butez. Je ne connais pas bien le K&R (honte
à moi) mais peut-être y a-t-il un hiatus entre le prérequis de cet
ouvrage et votre background. Avant de passer au C, il vous faut valider
les points suivants:
- Représentation des nombres en binaire naturel. Bien maîtriser
quelques évidences: quand on ajoute un 0 à droite, on multiplie par 2
(par 10 en décimal), quand on enlève le chiffre de droite, on divise
par 2 (par 10 en décimal). Dualité du bit (le chiffre en binaire) :
numérique et logique (vrai/faux). Cette dualité n'existe pas en
décimal.
- Notions de représentation des nombres signés.
- Logique combinatoire de base. Le NON, le ET, le OU et le OU EXCLUSIF.
Bien voir qu'à coté de la mathématique, ce sont également des notions
"de tous les jours". Par exemple le OU EXCLUSIF, c'est "fromage ou
dessert", ou "pas (jaune ou rouge)", c'est "pas jaune et pas rouge"
("ni jaune ni rouge")(thèorème de De Morgan). Cette dernière partie est
plutôt utile dans l'écriture des conditions.
- Vous introduisez ensuite les opérateurs bitwise dans un environnement
dans lequel la représentation des données est connue, assembleur, Java,
etc. Vous remarquerez que le décalage à gauche existe souvent en deux
versions, signée ou non signée. ET, OU et OU EXCLUSIF sont des
opérations qui se font sur chaque bit indépendamment des autres, un
traitement parallèle en quelque sorte.
- Vous voyez les notions de masquage et de forçage.
- Vous reprenez le K&R, et appliquez tout ça au C, langage qui cache si
bien son déterminisme. Là, vous remarquerez que certaines opérations
sont indéterminées en C portable.
Bonjour, j'ai recement aquis "The C programming language" de B. Kernighan et D. Ritchie après avoir appris le C à l'aide d'un cours sur internet, dans le but d'appronfondir mes connaissances, je ne suis pas du tout déçu car j'ai par exemple enfin compris les ternaires (le rédacteur du cours que j'avais suivis ne les supportaient pas) mais je bloque sur une notion nouvelle (pour moi), situé en 2.9 : les "Bitwise operators", je n'ai absolument rien compris à cette notion, peut-être parce que je lis le livre en version originale, aussi j'aimerais que quelqu'un m'explique au moins à quoi cela sert.
Il faudrait savoir où vous butez. Je ne connais pas bien le K&R (honte à moi) mais peut-être y a-t-il un hiatus entre le prérequis de cet ouvrage et votre background. Avant de passer au C, il vous faut valider les points suivants:
- Représentation des nombres en binaire naturel. Bien maîtriser quelques évidences: quand on ajoute un 0 à droite, on multiplie par 2 (par 10 en décimal), quand on enlève le chiffre de droite, on divise par 2 (par 10 en décimal). Dualité du bit (le chiffre en binaire) : numérique et logique (vrai/faux). Cette dualité n'existe pas en décimal.
- Notions de représentation des nombres signés.
- Logique combinatoire de base. Le NON, le ET, le OU et le OU EXCLUSIF. Bien voir qu'à coté de la mathématique, ce sont également des notions "de tous les jours". Par exemple le OU EXCLUSIF, c'est "fromage ou dessert", ou "pas (jaune ou rouge)", c'est "pas jaune et pas rouge" ("ni jaune ni rouge")(thèorème de De Morgan). Cette dernière partie est plutôt utile dans l'écriture des conditions.
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée. ET, OU et OU EXCLUSIF sont des opérations qui se font sur chaque bit indépendamment des autres, un traitement parallèle en quelque sorte.
- Vous voyez les notions de masquage et de forçage.
- Vous reprenez le K&R, et appliquez tout ça au C, langage qui cache si bien son déterminisme. Là, vous remarquerez que certaines opérations sont indéterminées en C portable.
-- Pierre Maurette
Stéphane Goujet
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
A+, Stéphane.
- Vous introduisez ensuite les opérateurs bitwise dans un environnement
dans lequel la représentation des données est connue, assembleur, Java,
etc. Vous remarquerez que le décalage à gauche existe souvent en deux
versions, signée ou non signée.
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
A+, Stéphane.
Pierre Maurette
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
Ooooops ...
-- Pierre Maurette
- Vous introduisez ensuite les opérateurs bitwise dans un environnement
dans lequel la représentation des données est connue, assembleur, Java,
etc. Vous remarquerez que le décalage à gauche existe souvent en deux
versions, signée ou non signée.
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
Ooooops ...
-- Pierre Maurette
Harpo
Stéphane Goujet wrote:
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
Ca peut être les 2, je me souviens d'un assembleur dans lequel il y a SLL (Shift Left Logical) et SLA(Shift Left Algebraic) qui ne touche pas au bit de signe.
-- http://patrick.davalan.free.fr/
Stéphane Goujet wrote:
- Vous introduisez ensuite les opérateurs bitwise dans un
environnement dans lequel la représentation des données est connue,
assembleur, Java, etc. Vous remarquerez que le décalage à gauche
existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
Ca peut être les 2, je me souviens d'un assembleur dans lequel il y a
SLL (Shift Left Logical) et SLA(Shift Left Algebraic) qui ne touche pas
au bit de signe.
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
Ca peut être les 2, je me souviens d'un assembleur dans lequel il y a SLL (Shift Left Logical) et SLA(Shift Left Algebraic) qui ne touche pas au bit de signe.
-- http://patrick.davalan.free.fr/
Pierre Maurette
Stéphane Goujet wrote:
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
Ca peut être les 2, je me souviens d'un assembleur dans lequel il y a SLL (Shift Left Logical) et SLA(Shift Left Algebraic) qui ne touche pas au bit de signe.
L'assembleur x86 prévoit également les deux mnémoniques (qui rient quand on les ...) SAL et SHL, mais c'est la même instruction machine (même opcode). C'est bien entendu lié au complément à deux. A partir du moment où "bloquer" le bit de signe ferait une différence, il y a de toutes façons dépassement.
-- Pierre Maurette
Stéphane Goujet wrote:
- Vous introduisez ensuite les opérateurs bitwise dans un
environnement dans lequel la représentation des données est connue,
assembleur, Java, etc. Vous remarquerez que le décalage à gauche
existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
Ca peut être les 2, je me souviens d'un assembleur dans lequel il y a
SLL (Shift Left Logical) et SLA(Shift Left Algebraic) qui ne touche pas
au bit de signe.
L'assembleur x86 prévoit également les deux mnémoniques (qui rient
quand on les ...) SAL et SHL, mais c'est la même instruction machine
(même opcode).
C'est bien entendu lié au complément à deux. A partir du moment où
"bloquer" le bit de signe ferait une différence, il y a de toutes
façons dépassement.
- Vous introduisez ensuite les opérateurs bitwise dans un environnement dans lequel la représentation des données est connue, assembleur, Java, etc. Vous remarquerez que le décalage à gauche existe souvent en deux versions, signée ou non signée.
Le décalage à droite, pas à gauche.
Ca peut être les 2, je me souviens d'un assembleur dans lequel il y a SLL (Shift Left Logical) et SLA(Shift Left Algebraic) qui ne touche pas au bit de signe.
L'assembleur x86 prévoit également les deux mnémoniques (qui rient quand on les ...) SAL et SHL, mais c'est la même instruction machine (même opcode). C'est bien entendu lié au complément à deux. A partir du moment où "bloquer" le bit de signe ferait une différence, il y a de toutes façons dépassement.
-- Pierre Maurette
Harpo
Pierre Maurette wrote:
Ca peut être les 2, je me souviens d'un assembleur dans lequel il y a SLL (Shift Left Logical) et SLA(Shift Left Algebraic) qui ne touche pas au bit de signe.
L'assembleur x86 prévoit également les deux mnémoniques (qui rient quand on les ...) SAL et SHL, mais c'est la même instruction machine (même opcode). C'est bien entendu lié au complément à deux. A partir du moment où "bloquer" le bit de signe ferait une différence, il y a de toutes façons dépassement.
<HS> Je ne me souuviens pas d'avoir utilisé le décalage algébrique. Dans ce cas, il provoquait une interruption pour overflow, bien que pour cette instruction ce ne doit pas être très utile, pour les addition etc. cela permet en écrivant un interrupt handler de ne pas perdre de temps à tester l'overflow dans une boucle lorsqu'il n'arrive qu'exceptionellement. </HS>
-- http://patrick.davalan.free.fr/
Pierre Maurette wrote:
Ca peut être les 2, je me souviens d'un assembleur dans lequel il y a
SLL (Shift Left Logical) et SLA(Shift Left Algebraic) qui ne touche
pas au bit de signe.
L'assembleur x86 prévoit également les deux mnémoniques (qui rient
quand on les ...) SAL et SHL, mais c'est la même instruction machine
(même opcode).
C'est bien entendu lié au complément à deux. A partir du moment où
"bloquer" le bit de signe ferait une différence, il y a de toutes
façons dépassement.
<HS>
Je ne me souuviens pas d'avoir utilisé le décalage algébrique.
Dans ce cas, il provoquait une interruption pour overflow, bien que pour
cette instruction ce ne doit pas être très utile, pour les addition
etc. cela permet en écrivant un interrupt handler de ne pas perdre de
temps à tester l'overflow dans une boucle lorsqu'il n'arrive
qu'exceptionellement.
</HS>
Ca peut être les 2, je me souviens d'un assembleur dans lequel il y a SLL (Shift Left Logical) et SLA(Shift Left Algebraic) qui ne touche pas au bit de signe.
L'assembleur x86 prévoit également les deux mnémoniques (qui rient quand on les ...) SAL et SHL, mais c'est la même instruction machine (même opcode). C'est bien entendu lié au complément à deux. A partir du moment où "bloquer" le bit de signe ferait une différence, il y a de toutes façons dépassement.
<HS> Je ne me souuviens pas d'avoir utilisé le décalage algébrique. Dans ce cas, il provoquait une interruption pour overflow, bien que pour cette instruction ce ne doit pas être très utile, pour les addition etc. cela permet en écrivant un interrupt handler de ne pas perdre de temps à tester l'overflow dans une boucle lorsqu'il n'arrive qu'exceptionellement. </HS>