jQuery
En savoir plus
Adobe Flex & Flash
En savoir plus
ASP.NET
En savoir plus

| Page 1 | |||||
| Pseudo | Commentaire | ||||
|---|---|---|---|---|---|
| Page 1 | |||||
Anonyme
|
# Posté le 21/03/2007 à 17:11:05 | ||||
|
|
Excellent tuto (un poil trop technique pour moi) !
Je me posais justement la question... Merci ! 17/20 |
||||
shuss
|
# Posté le 21/03/2007 à 18:20:11 | ||||
![]()
|
Bon tuto ! C'est vrai que j'ai du, dans un premier temps, comprendre les flags par moi-même, et ça n'a pas été facile (mais avec l'SI, j'ai tout pigé).
Je ferais juste une remarque : Code : C++ #define NO_FLAG 0
#define FLAG_A 1 #define FLAG_B 2 #define FLAG_C 4 #define FLAG_D 8 je trouve que d'utiliser des nombres décimaux n'est pas très clair ! Puisqu'on s'arrête à 8, ça va ici, mais si on à 64 (01000000), ou encore 67 pour des flags un peu plus poussé (01000011), les nombres décimaux deviennent incompréhensibles. L'hexadécimal est plus utile pour ça, mais le meilleur, c'est des les écrire directement en binaire (là au moins c'est clair).Code : C++ #define NO_FLAG 0
#define FLAG_A 0b0001 #define FLAG_B 0b0010 #define FLAG_C 0b0100 #define FLAG_D 0b1000 Enfin voilà, c'est plutôt utile comme tuto. |
||||
NarTy
|
# Posté le 22/03/2007 à 13:40:27 | ||||
|
Je t'aime amèrement ! Groupe : Bannis
|
tuto tres interessant , bravo ! 17
Venez jouer
|
||||
Darkelfe
|
# Posté le 23/03/2007 à 18:30:21 | ||||
Apprendre tout sur tout![]()
Ville : Brignais |
Tuto très intéressant et insctructif.
18/20 Citation La négligence du détail détruit l'intelligence de la conception. Un jeu simple mais addictif ? Minecraft ! |
||||
-ed-
|
# Posté le 26/03/2007 à 09:10:54 | ||||
C is a sharp tool![]()
Études : ECE |
Hum, ce code est incorrect...
Citation : tuto flags Sceptique ? Essayez de compiler ce petit code. Code : C #include <stdlib.h> #include <stdio.h> int main (int argc, char *argv[]) { printf("%Id / %Id / %Id", (138|92), (138&92), (138^92)); return 0; } Code : Console Project : Forums Compiler : GNU GCC Compiler (called directly) Directory : C:\dev\forums2\ -------------------------------------------------------------------------------- Switching to target: default Compiling: main.c main.c: In function `main': main.c:6: warning: unknown conversion type character `I' in format main.c:6: warning: unknown conversion type character `I' in format main.c:6: warning: unknown conversion type character `I' in format main.c:6: warning: too many arguments for format main.c: At top level: main.c:4: warning: unused parameter 'argc' main.c:4: warning: unused parameter 'argv' Linking console executable: console.exe Process terminated with status 0 (0 minutes, 0 seconds) 0 errors, 6 warnings Ceci est correct : Code : C #include <stdio.h> int main (void) { printf ("%d / %d / %d", (138 | 92), (138 & 92), (138 ^ 92)); return 0; } Emmanuel Delahaye. Des infos sur la programmation et le langage C http://bien-programmer.blogspot.com/ http://bien-programmer.forum-actif.net/forum.htm ![]() |
||||
Spiky.88
|
# Posté le 26/03/2007 à 18:21:38 | ||||
Hello World !![]()
Études : Université Versailles Saint Quentin |
Il est bien ce tuto, c'est en faite une technique de faire du C++ avec du c. | ||||
Pier-Yves Lessard
|
# Posté le 27/03/2007 à 04:07:43 | ||||
![]() Avis : Très bon
|
Merci pour les commentaires.
J'ai corrigé le code pour éviter les warning que -ed- m'a indiqué. J'ai aussi spécifié qu'il était possible d'utiliser des valeurs binaires et même qu'il était conseillé d'en faire autant si plusieur flags il y a, comme shuss l'a conseillé. |
||||
Rafale
|
# Posté le 29/03/2007 à 23:42:44 | ||||
|
|
Bon tuto.
Je met 15 (fallait pas me mettre 13 au QCM na! xD ) Quand on a 13 au QCM (je sais c'st nul mais j'avais pas envie de faire le calcul lol) :
Citation : Pas de titre Commentaires du professeur : C'est bien, c'est bien. Bon, je vais pas aller jusqu'à dire que c'est excellent, mais "bien" c'est déjà un bon commencement :-p
J'irais pas jusuqu'à dire que commencent est français (mais je me trompe peut etre) Je mettrais début
|
||||
brastir
|
# Posté le 18/11/2007 à 11:39:40 | ||||
|
|
Bon tuto je met 17. Mais même commentaire que Rafale! Car 7 points juste pour des calcule de bases c'est un peu dur! | ||||
Ptitl0u
|
# Posté le 22/01/2008 à 16:33:37 | ||||
Avec un 0 comme zéro![]()
|
Bon tuto dans l'ensemble. Une question, tant que t'y était avec les opérateurs bitaires pourquoi ne pas avoir parlé de l'opérateur de négation ~ ? |
||||
Pruneau
|
# Posté le 25/04/2008 à 14:21:41 | ||||
Holla at me !![]()
|
Pour ma part ce sera 18. Vraiment bien expliqué et bien détaillé ! Merci pour ce tutorial
|
||||
cube45
|
# Posté le 16/07/2008 à 17:28:29 | ||||
![]()
Ville : Olivet |
Merci pour ce tutoriel, je me posais la question il y a quelques temps et j'avais galéré pour trouver une réponse claire...
Citation : Alexander Kotov Un plan correct fait de nous des héros ; l'absence de plan fait de nous des zéros. |
||||
raphamil
|
# Posté le 02/11/2008 à 23:54:27 | ||||
|
Études : Université de Bordeaux |
Ptitl0u: je plussoie. Très bon tuto, mais LES #DEFINE CA PUE !!!1oneeleven! Code : C
Les langages fonctionnels sont un rien spéciaux, mais ils changent votre manière de voir un programme. Si vous ne connaissez que des dérivés du C (PHP, Python, etc.), changez votre manière de voir ici, et avec OCaml, Haskell, ou Scheme. |
||||
Dj Kyk
|
# Posté le 26/12/2008 à 00:17:30 | ||||
J'suis un homme comme moi! ^_^![]()
Études : INSA Lyon |
Très bon tuto, même si je n'ai lu que la partie "Flags", connaissant déjà les opérateurs bitwise. Juste une remarque : Citation : PY Un unsigned int, étant écrit sur 32 bits, permettra de stocker un minimum de 32 flags. Un unsigned short permetterait d'en stocker un minimum de 16. Un unsigned char, un minimum de 8, etc. À vous de voir quel type vous allez utiliser. Ce serait pas plutot un maximum? A shuss et à PY : le préfixe "0b" n'existe pas ni en C ni en C++ à ma connaissance. En tout cas chez moi ça ne marche pas et il me renvoie une erreur. A Ptitl0u : il est vrai que cet opérateur est rarement cité et c'est dommage. Peut-être n'est-t-il pas très utile? Pour ma part je l'ai déjà utilisé mais bon... Citation : raphamil FLAG_B = 0x2, //La notation octale Non, ceci est la notation hexadécimale. La notation octale est bien : 07 // (7)8 08 // impossible car on passe à 10 après 7 en octal 025 // (25)8 en gros le préfixe est 0. Citation : Spiky.88 Il est bien ce tuto, c'est en faite une technique de faire du C++ avec du c. Pourquoi? Sinon à part ça, c'est une bonne astuce ces flags!
Dj Kyk |
||||
congelli501
|
# Posté le 03/02/2009 à 22:26:06 | ||||
![]()
Ville : La férté-milon |
Bravo, c'était clair et précis !
Mes programmes open sources ! On dit que la Grèce antique beaucoup d'influence sur notre culture... C'est vrai : la chute d'Athènes a eu lieu en 404 avant JC. Ça vous rappelle quelque chose ? |
||||
rz0
|
# Posté le 15/08/2009 à 15:39:21 | ||||
Papa Ours.![]()
Études : Ensimag |
Dj Kyk > Euh ouais, "0b" ça n'existe pas en C, probablement une extension quelconque d'un vendor, faut pas mettre ça dans le tuto. Par contre, c'est bien "minimum". raphamil > Mieux encore avec des enum, tu peux faire ça : enum { NO_FLAG, FLAG_A, FLAG_B = FLAG_A << 1, FLAG_C = FLAG_B << 1, FLAG_D = FLAG_C << 1 }; Évite d'avoir à se préoccuper des valeurs exactes, et s'étend facilement, même si tu veux ajouter une valeur en plein milieu. |
||||
iCe_sCrEAm
|
# Posté le 11/12/2009 à 10:10:40 | ||||
Smoking heals![]()
|
Ahhh Super .. Alors c'est comme ca que ca marche les Flags !! #include <www.siteduzero.com> #ifnread tuto_c++ #read tuto_c++ |
||||
ZéroZéroHuit-008
|
# Posté le 14/01/2010 à 20:20:45 | ||||
![]()
|
Ah, le problème des flags en C enfin éclaircit Bon tuto, clair et explicite malgré les calculs un peu plus "techniques" ![]() Citation : rz0 raphamil > Mieux encore avec des enum, tu peux faire ça : enum { NO_FLAG, FLAG_A, FLAG_B = FLAG_A << 1, FLAG_C = FLAG_B << 1, FLAG_D = FLAG_C << 1 }; Évite d'avoir à se préoccuper des valeurs exactes, et s'étend facilement, même si tu veux ajouter une valeur en plein milieu. Ooh, bien joué, ça mériterais de figurer dans le tuto. |
||||
LaTomateFrivole
|
# Posté le 22/06/2010 à 19:41:21 | ||||
My only wish is to be EATEN![]()
|
Très bon tuto.
|
||||
Quentin Guibert
|
# Posté le 03/07/2010 à 16:00:17 | ||||
![]()
Ville : Saint martin de valgalgues |
Salut, Citation : Dj Kyk A shuss et à PY : le préfixe "0b" n'existe pas ni en C ni en C++ à ma connaissance. En tout cas chez moi ça ne marche pas et il me renvoie une erreur. Bah, c'est une extension du compilateur GCC, donc... Donc, je conseillerai à l'auteur de retirer ces préfixes ou alors de conditionner la compilation du code source en testant la constante symbolique '__GNUC__' qui indique si on utilise un compilateur GNU (normalement, elle est définie par les compilateurs GNU qui utilisent le préprocesseur du langage C (cpp)). Code : C
Petite erreur ici : Citation : PY Notez qu'il est possible de vérifier si 2 flags sont passés en même temps en écrivant if ((flags & (FLAG_A | FLAG_B) ) !=0). Pour vérifier si deux drapeaux ont été passés dans l'argument séparés par un OU inclusif, on fait ceci : Code : C
En tout cas, beau tutoriel : clair, net, GG ! (: |
||||
Pier-Yves Lessard
|
# Posté le 15/09/2010 à 04:48:49 | ||||
![]() Avis : Très bon
|
J'ai corrigé certains points au tuto. 1) Un entier 8 bits peut stocker un maximum de 8 flag, et non un minimum. 2)Le préfixe 0b n'est pas suporté par tous les compilateurs, en effet. Je ne le savais pas lors de l'écriture de ce tutoriel. 3) Retiré al fausse affirmation sur le test de plusieurs flags dans le même if. 4)J'ai mit un bémol sur l'utilisation du type int pour des flags étant donné que la taille de l'entier est variable en fonction de la machine utilisé. Merci à vous tous pour les commentaires pertinents et désolé du délai avant la correction de ces détails. |
||||
eLaps
|
# Posté le 15/09/2010 à 20:27:48 | ||||
|
|
Pourquoi ne pas présenter la définition des flags avec l'opérateur de décalage << (présenté mais inutilisé) ? Les puissances de 2 ou l'hexadécimale sont beaucoup moins clairs que (1 << n). |
||||
uknow
|
# Posté le 18/09/2010 à 03:42:31 | ||||
chercher est un art![]() |
Bonjour, J'ai une petite remarque concernant ceci : Citation : ISO/IEC9899 The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with zeros. If E1 has an unsigned type, the value of the result is E1 2^(E2), reduced modulo one more than the maximum value representable in the result type. If E1 has a signed type and nonnegative value, and E1 2^(E2) is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined. Citation : tuto Ça devient encore plus compliqué si on décale une variable de type signé. Il faut tenir compte du premier bit qui détermine le signe du nombre. Si on attribue la valeur 127 (1111111) à une variable de type char (8 bit signés). Un décalage de 1 vers la gauche sera équivalent à -2 ou, en binaire, (1)1111110. Même en considérant une implémentation codant les entiers négatifs en complément à 2 (ce qui ne sera pas forcément le cas), le résultat de 0x7F << 1 n'est as défini. Or toi tu le définis comme étant 0xFE ce qui ne sera pas forcément le cas. Ma deuxième remarque est que j'ai l'impression que tu ne mets pas les lecteurs en garde contre l'utilisation des opérateurs bit-wise, qui nécessite une vigilance considérable pour avoir un code portable. Sinon le tutoriel m'a l'aire bien rédigé. Lecture et écriture dans fichiers en mode binaire. | Les pointeurs de fonctions. | Les tableaux et allocation dynamique. | Langage C pour les curieux (rédigé dans le champ "biographie"). L'électronique du zéro. (mise à jour - 17/04/2012). |
||||
perseeverat
|
# Posté le 20/12/2011 à 18:06:30 | ||||
![]()
Ville : Saint-benoÎt |
Joli tuto. Ma lanterne est un peu plus éclairée sur les flags. Petite faute de frappe dans la correction du QCM à la troisième question: Il faut écrire 10000111 & 11010011 = 10000011 au lieu de 10000111 & 1101001 = 10000011 |
||||
