IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Demande information sur getchar


Sujet :

C

  1. #21
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Là c'est clair…
    Oui, mais c'est quand même une grosse simplification de quelque chose qui n'était pourtant pas fondamentalement difficile de prime abord.

    Ce qu'il aurait fallu, c'est que tu reconnaisses le motif qui s'affiche à l'écran quand tu tapes des touches spéciales, que tu découvres par toi-même que c'est une séquence CSI en faisant par exemple une recherche Google avec les codes que tu as lu (et qui t'auraient renvoyé des milliers de pages parce qu'ils sont extrêmement répandus) et que, de là, tu cherches d'une part la définition d'une séquence CSI et, d'autre part, son format. Il faudra ensuite que tu fasses exactement la même chose avec les autres types de trames que tu pourrais rencontrer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	info.c_lflag &= ~ECHO && ICANON; // ~ECHO=noecho ICANON=mode canonique (pas d'attente de entrée)
    Il y a une énorme erreur sur cette ligne. Peux-tu voir laquelle ?

    Je n'utilise pas de machine à état,et mon code est à mon niveau opérationnel. Grosso-modo si la séquence est non reconnue (ne commençant pas par [ après esc ou n'étant pas flèche gauche ou F10 - les deux touches spéciales que je gère) j'ai un retour de 0.
    L'avantage des automates, c'est qu'il fonctionnent en observateur sans dépendre en soi de la cohérence de ton flux. Et surtout, ça te permet d'en faire fonctionner plusieurs en parallèle, chose impossible avec un algo tel que celui que tu nous présentes.

    Pour info, les erreurs de transmissions sont négligeables car je travaille en terminal virtuel (pas de liaison sérielle ou réseau)
    Ce n'est pas « négligeable » : c'est un point à prendre en compte dès les premières lignes de la conception de ton programme : tu dois absolument considérer les données extérieures à ton système comme non fiables et celui-ci ne doit jamais être mis en défaut en cas d'incohérence. Sinon, c'est une faille de sécurité puisque n'importe qui peut le faire planter, éventuellement à distance, en lui envoyant des données avariées.

    Obsidian, je ne tiens pas compte de ton dernier paragraphe du moins dans mon code (gestion de "^"), mais ça n'en ai pas moins intéressant.
    Tu n'as pas à le gérer puisqu'il n'y a rien de tel dans le flux. C'est un artefact uniquement dû à la façon dont les codes spéciaux sont affichés à l'écran.

    Pour avoir un code fiable, il me faudrait gérer dans le cas d'une chaine CSI erronée sa longueur car le codee que j'ai fait tel que présenté présentera un buffer overflow en cas de non présence de caractère supérieur ou égal à 40h, et d'autre part, je ne gère pas l'appui unique sur la touche echap ce qui se présentera clairement.
    En effet. Sachant que la touche Echap sert justement, en principe, à permettre à l'utilisateur d'envoyer ce code et, donc, vaut exactement 1B. Rien ne la distingue en soi du début d'une séquence émise automatiquement par le terminal.

    Autre petit détail : les touches Home et End ne font pas partie de CSI, mais de SS3 :-)

    Pour moi mon prob est résolu, et j'ai appris plein de trucs sur le terminal.
    Merci encore Obsidian pour le temps consacré et les explications détaillées. Merci également aux autres contributeurs.
    Je laisse encore la discussion ouverte si qq1 à qq chose à ajouter.
    Dans ce cas, je passe ta discussion en « résolu » quand même. Tu pourras la repasser à l'état non résolu en recliquant sur le même bouton.

  2. #22
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 823
    Points
    42 823
    Par défaut
    Ce qu'il aurait fallu, c'est que tu reconnaisses le motif qui s'affiche à l'écran quand tu tapes des touches spéciales
    Je l'avais fait Obsdian. En fait je n'ai besoin de gérer que la flèche du haut comme touche spéciale. Au début, avant que tu me donnes l'info sur CSI. J'ai cherché à comprendre le cheminement en analysant le flux avec scanf. C'est en appuyant sur d'autres touches que celles qui m’intéressait que me suis rendu compte que les codes retournés étaient de longueur variable. De mes tests, en était ressorti que soit je me retrouvait avec une séquence \27[ suivi de A, B, C etc .. selon la touche soit \27[ un ou deux chiffre puis ~. Ça fonctionnait. La doc parlant du symbole @ m"a embrouillé. Tu m'as ensuite donné l'explication et j'ai modifié mon code en conséquence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info.c_lflag &= ~ECHO && ICANON;
    Il y a une énorme erreur sur cette ligne. Peux-tu voir laquelle ?
    Ce code m'a été donné par archMqx. Comme ça je dirais que le & est en trop, mais je suis pas sûr. Je viens de tester, ça ne change pas le fonctionnement. Ca marche avec ou sans. C'est la 1ère fois que je voyais &= mais je ne suis pas programmeur et ne connais par exemple pas les nouvelles normes C11 ou 14.

    Ce n'est pas « négligeable » : c'est un point à prendre en compte dès les premières lignes de la conception de ton programme : tu dois absolument considérer les données extérieures à ton système comme non fiables et celui-ci ne doit jamais être mis en défaut en cas d'incohérence
    Je le fais. si ma chaine ne retourne ni \27[A ni \27[21~ je retourne 0. Je considères 0 comme une ereur. Le seul cas que je ne gère pas pour le moment, est l'appui sur la touche echap. Après je dis pas que ce que j'ai fait n'est pas améliorable.

    Autre petit détail : les touches Home et End ne font pas partie de CSI, mais de SS3 :-)
    Tu veux m'achever là ?

    Dans ce cas, je passe ta discussion en « résolu » quand même.
    Pas de soucis.

    Et dernière petite question : les codes escapes des imprimantes sont aussi de l'ECMA ou c'est autre chose ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #23
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info.c_lflag &= ~ECHO && ICANON;
    Ce code m'a été donné par archMqx.
    Pas tout-à-fait : archMqx t'a donné un code que tu as adapté ensuite et c'est à ce moment que tu as introduit cette erreur.

    Comme ça je dirais que le & est en trop, mais je suis pas sûr. Je viens de tester, ça ne change pas le fonctionnement. Ca marche avec ou sans. C'est la 1ère fois que je voyais &= mais je ne suis pas programmeur et ne connais par exemple pas les nouvelles normes C11 ou 14.
    En fait, il y a plusieurs erreurs :

    • Le mode canonique, mis en place par ICANON, est justement le mode où les lignes sont bufferisées et où les caractères de contrôle jouent leur rôle. Il faut désactiver le mode canonique pour recevoir les caractères directement et pas l'inverse ;
    • Le champ c_lflag de ta structure, tout comme les autres champs …flag, est un entier dont on utilise chaque bit indépendamment de ses voisins et comme un flag distinct. Il va donc nous falloir un moyen de les mettre chacun à 1 ou à 0 en fonction de nos besoins ;
    • « &= » est une syntaxe tout-à-fait valide depuis les premières versions du C. Elle correspond à une auto-affection : « x &= y » est équivalent à « x = x & y », donc un ET logique entre la valeur originale du registre de destination et celle qu'on souhaite lui appliquer. C'est utilisable avec les autres opérateurs, donc « += », « -= », « *= », « /= », « %= » et « |= ». Le dernier est d'ailleurs un OU logique « | » ;
    • « ~ » est un NON logique : cela inverse bit à bit tout le contenu de ton registre ;
    • Un OU logique correspond à une union mathématique, et donc à une superposition des bits des deux registres ;
    • Un ET logique correspond à une intersection mathématique et l'appliquer entre deux registres conservera uniquement les bits qui sont à 1 des deux côtés. C'est pourquoi il faut préalablement inverser la valeur de ECHO avec ~ : pour mettre à zéro les bits marqués et préserver les autres ;
    • La ligne que tu as écrite en ajoutant un « & » est donc incorrecte sur le plan logique ;
    • Pire que cela, tu as utilisé « && » et pas « & », soit en réalité un pseudo-ET. Les opérandes sont donc d'abord convertis en booléens, et le résultat l'est aussi : autrement dit, le résultat de ton opération sera forcément 0 ou 1. Transposé au champ de bit, ça veut dire que tous les bits seront à zéro à part éventuellement le premier. Du coup, cela efface bien les deux flags que tu voulais nettoyer, mais ça écrase tout le reste également !


    Tu veux m'achever là ?
    Non, je m'en suis rendu compte par hasard. :-)
    Le pire, c'est que Home et End émis depuis le pavé numérique renvoient bien des séquences CSI, mais que ces deux touches sur un clavier « étendu » envoient une séquence du jeu SS3. C'est à peine plus compliqué : ESC O à la place de ESC [.

    Et dernière petite question : les codes escapes des imprimantes sont aussi de l'ECMA ou c'est autre chose ?
    Sûrement pas de l'ECMA, à mon avis. Après ça dépend de l'imprimante en question : soit c'est une vieille imprimante et il y a des chances qu'elle ne réagisse qu'à l'ASCII ou à un jeu propre qui ressemble assez au Vidéotex, soit c'est une imprimante récente et dans ce cas, elle répondent au Postscript ou au PCL. Ce sont alors des langages à part entière.

  4. #24
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 823
    Points
    42 823
    Par défaut
    « &= » est une syntaxe tout-à-fait valide depuis les premières versions du C. Elle correspond à une auto-affection : « x &= y » est équivalent à « x = x & y »,
    Ok, je vais avoir du mal à m'en souvenir, je ne fais pas assez de C.

    archMqx t'a donné un code que tu as adapté
    oui le code qu'il m'a donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info.c_lflag &= ~ICANON;
    mon adaptation (avec l'erreur que tu m'as expliqué) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info.c_lflag &= ~ECHO && ICANON;
    Par contre, même si le code n'est pas bon, cela fonctionne.

    J'ai donc corrigé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info.c_lflag &= ~ECHO & ICANON;
    et du coup, il me fallait appuyer sur entrée pour finir ma sélection

    J'ai donc modifié par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info.c_lflag &= ~ECHO & ~ICANON;
    Je pense que le fait de devoir mettre un ~ alors qu'il ne fallait pas avant vient de la différence de priorité de traitement entre & et &&

    Pire que cela, tu as utilisé « && » et pas « & », soit en réalité un pseudo-ET. Les opérandes sont donc d'abord convertis en booléens, et le résultat l'est aussi : autrement dit, le résultat de ton opération sera forcément 0 ou 1. Transposé au champ de bit, ça veut dire que tous les bits seront à zéro à part éventuellement le premier. Du coup, cela efface bien les deux flags que tu voulais nettoyer, mais ça écrase tout le reste également !
    Là je peux avoir un sacré prob. même si dans mon cas je n'ai rien constaté, et que je restaure les flags d'origine après traitement, mais bonjour la recherche en cas d'effet de bord ...

    Je connais l'inversion ~ et le et logique avec & et j'avais bien compris qu'il s'agissait d'un champ de bits, mais mauvais réflexe && (je programme en amateur et peu). Par contre le « &= » m'était inconnu. donc désolé pour l'accusation archMqx

    Pour les anciennes imprimantes, je me rappelle des séquences d'échappement et j'y ai pensé tout de suite. Et un flux PCL commence par \27. A mon avis c'est pas hasard. Maintenant c'est pas sûr que les commandes soit les mêmes, mais cela est un autre sujet ...
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #25
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Je pense que le fait de devoir mettre un ~ alors qu'il ne fallait pas avant vient de la différence de priorité de traitement entre & et &&
    Non car dans les deux cas, l'inversion sera prioritaire par rapport aux ET logiques. Ta formule était intrinsèquement incorrecte mais fonctionnait « par accident » à cause de l'utilisation du pseudo-ET « && ».

    Je connais l'inversion ~ et le et logique avec & et j'avais bien compris qu'il s'agissait d'un champ de bits, mais mauvais réflexe && (je programme en amateur et peu).
    Chacune des macros ECHO, ICANON et autres représentent à chaque fois la valeur d'un bit isolé du champ concerné, donc 1, 2, 4, 8, 16, 32… ou autre puissance de 2.

    • Pour cumuler les flags en question, il faut donc appliquer un OU logique : « ECHO | ICANON ». Par exemple, si ECHO vaut 16 et ICANON vaut 4, cela donnera respectivement en binaire : 00010000 et 00000100. Cumulés avec un OU, on obtient : 00010100 ;
    • Pour forcer d'un coup ces bits à zéro, il faudrait donc cumuler leur valeur, PUIS complémenter le résultat avec « ~ », puis enfin appliquer ce masque au champ de bit à l'aide d'un ET logique. Donc « ~(ECHO | ICANON) » ;
    • Il se trouve que les lois de la logique, telles qu'énoncées par de DeMorgan (entre autres) veulent que ¬(A | B) = ¬A & ¬B (en quelque sorte, on applique le négateur aux opérandes ET à l'opérateur). Ce qui fait que tu es retombé sur le bon résultat, mais pas forcément pour les bonnes raisons.


    Par contre le « &= » m'était inconnu. donc désolé pour l'accusation archMqx
    C'est pourtant bien pratique, et cela fait partie des éléments syntaxiques introduits par le C et repris dans beaucoup de langages apparus ultérieurement. Ça a aussi beaucoup d'avantage, spécialement quand on travaille en C++, mais pas seulement. À très bas niveau (assembleur et électronique numérique), les « auto-opérations » de ce type sont assez répandues : c'est la base même des accumulateurs, par exemple.

    Pour les anciennes imprimantes, je me rappelle des séquences d'échappement et j'y ai pensé tout de suite. Et un flux PCL commence par \27. A mon avis c'est pas hasard. Maintenant c'est pas sûr que les commandes soit les mêmes, mais cela est un autre sujet ...
    Ce n'est effectivement pas un hasard, mais ce n'est sûrement pas en rapport avec l'ECMA. Ce sont plutôt ces deux langages qui ont un ancêtre commun. Tout-à-fait au départ, les ordinateurs n'avaient même pas d'écrans cathodiques et passés les afficheurs à lampes des premières machines expérimentales, les ordinateurs produisaient leur sortie sur des téléscripteurs, qui étaient des imprimantes ressemblant surtout à des machines à écrire télécommandées électriquement, par exemple les Teletype (abrégés en TTY, avec laquelle on désigne toujours aujourd'hui nos terminaux virtuels). Le code ASCII date de cette époque et on remarque que les codes de contrôle servent surtout à gérer un flux de papier.

    Les imprimantes personnelles apparues beaucoup plus tard, du temps de la micro-informatique, celle que l'on branchait sur le port parallèle, fonctionnaient toujours sur le même principe et même aujourd'hui, le principe perdure même sur les modèles récents : en l'absence de mode particulier, tout caractère envoyé tel quel à l'imprimante est immédiatement imprimé sur le papier. Avec les matricielles, il suffit de déplacer le chariot et d'attendre la suite. Avec les imprimantes jet d'encre qui sont uniquement feuille-à-feuille et surtout avec les laser, c'est plus compliqué : il faut bufferiser les caractères reçus le temps d'en avoir suffisamment pour remplir une page entière ou, à défaut, établir arbitrairement un cours délai de grâce avant de décider d'effectuer le rendu de la page si le flot se tarit.

    Toujours est-il qu'il faut lancer une séquence Esc pour expliquer à l'imprimante que l'on « sort du flux régulier » pour lui adresser une suite d'instructions, ce qui est la sémantique du code Escape original.

  6. #26
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 823
    Points
    42 823
    Par défaut
    Il se trouve que les lois de la logique, telles qu'énoncées par de DeMorgan (entre autres) veulent que ¬(A | B) = ¬A & ¬B (en quelque sorte, on applique le négateur aux opérandes ET à l'opérateur). Ce qui fait que tu es retombé sur le bon résultat, mais pas forcément pour les bonnes raisons.
    Ah oui, je crois que je l'ai vu en cours C ça. Mais ça fait longtemps.... et pas vraiment pratiqué.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #27
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Ah oui, je crois que je l'ai vu en cours ça. Mais ça fait longtemps.... et pas vraiment pratiqué.
    C'est intéressant parce que cela a été formalisé mathématiquement mais ce n'est pas très difficile en soi. Admettons que tu aies une lampe qui soit commandée par deux interrupteurs en amont :

    • Si tu as deux interrupteurs A et B en série : pour allumer la lampe, il faut fermer l'interrupteur A ET l'interrupteur B. Pour éteindre la lampe, il faut ouvrir l'interrupteur A OU l'interrupteur B (ou les deux) ;
    • Si tu as deux interrupteurs A et B en parallèle : pour allumer la lampe, il faut fermer l'interrupteur A OU l'interrupteur B (ou les deux). Pour éteindre la lampe, il faut ouvrir l'interrupteur A ET l'interrupteur B ;

  8. #28
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 823
    Points
    42 823
    Par défaut
    J'ai fait de l’algèbre de Boole en logique combinatoire. Quand j'ai vu le nom de de Morgan, je m'en suis rappelé (sans me rappeler forcément le théorème, ça fait 20ans...)

    Du coup je l'ai recherché pour rappel et pour ceux que ça intéresse :

    Théorème 1 :
    Le complémentaire du OU des variables est égal au ET des complémentaires de chaque variable.
    non (A ou B) = (non A) et (non B).

    Théorème 2 :
    Le complémentaire du ET des variables est égal au OU des complémentaires de chaque variable.
    non (A et B) = (non A) ou (non B).

    C'est un peu comme une identité remarquable, quand on n'est plus dans le bain ...

    Après c'est sûr que c'est pas évident à y penser pour implémenter avec des flags, à la base j'ai vu ça en électronique numérique.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  9. #29
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    J'ai fait de l’algèbre de Boole en logique combinatoire. Quand j'ai vu le nom de de Morgan, je m'en suis rappelé (sans me rappeler forcément le théorème, ça fait 20ans...)

    Du coup je l'ai recherché pour rappel et pour ceux que ça intéresse :

    Théorème 1 :
    Le complémentaire du OU des variables est égal au ET des complémentaires de chaque variable.
    non (A ou B) = (non A) et (non B).

    Théorème 2 :
    Le complémentaire du ET des variables est égal au OU des complémentaires de chaque variable.
    non (A et B) = (non A) ou (non B).
    Ce qui est en substance ce que je viens d'écrire au-dessus.

    C'est un peu comme une identité remarquable, quand on n'est plus dans le bain ...
    Après c'est sûr que c'est pas évident à y penser pour implémenter avec des flags, à la base j'ai vu ça en électronique numérique.
    C'est bien pour cela que j'ai écrit le commentaire au-dessus : si tu l'apprends uniquement comme une simple formule de maths, voire comme tu l'as dit, d'une « identité remarquable », tu n'auras effectivement jamais l'idée d'aller l'utiliser dans un programme alors que :

    • C'est un principe qui vient naturellement à l'esprit dans la vie courante (et qui a été démontré mathématiquement ensuite) ;
    • Il est nécessaire de recourir aux opérations logiques bit à bit quand elles sont disponibles et que l'on travaille avec des opérateurs plus larges. C'est le seul moyen de faire des modifications individuelles au niveau du bit et, par conséquent, elles font partie du développement logiciel dès les premiers exercices et quelque soit le langage. Même en BASIC, on les utilisait beaucoup (surtout en BASIC, même, car alors les pseudo-ET et pseudo-OU n'existaient pas et parce qu'on faisait par ailleurs beaucoup d'accès directs à la mémoire avec PEEK et POKE).

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Demande information sur le redimensionnement des fenetres
    Par stardeus dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 07/06/2007, 14h33
  2. Demande informations sur la transparence
    Par Claude URBAN dans le forum Windows
    Réponses: 2
    Dernier message: 04/01/2007, 20h11
  3. Demande information sur "TansparentColorValue.."
    Par Claude URBAN dans le forum C++Builder
    Réponses: 12
    Dernier message: 19/12/2006, 17h59
  4. Demande Information sur "TransparentColorValue"
    Par Claude URBAN dans le forum Delphi
    Réponses: 2
    Dernier message: 14/12/2006, 15h05
  5. Demande information sur les librairie.
    Par argon dans le forum C
    Réponses: 2
    Dernier message: 29/03/2006, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo