Je suis en train de consulter une documentation sur l'API de mon
système, et les exemple de ce tutorial sont en C. Cependant, j'ai vu
apparaitre des opérateurs que je n'avais pas appris en C :
- & (seul entre deux variables en non pas collé devant une variable,
comme pour récupérer son adresse)
- ? (de même, entre deux variables)
- : (pareil)
Je vous donne un exemple :
#define MIN(a,b) ((a) < (b) ? (a) : (b))
Je me doute bien que cette macro sert à récupérer la plus petite des
variables, mais comme ces opérateurs me sont inconnus...
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
Fabien Montagne
Salut,
#define MIN(a,b) ((a) < (b) ? (a) : (b)) C'est une macro (c'est à dire que c'est replacé directement dans le code par
le compilo). '?' indique que la première partie est une condition et en indique la fin et ':' separe les deux alternatives ce qui donne dans ton cas : si a<b alors a sinon b.
là j'ai un doute quant à la validité car normalement l'opérateur c'est '&&'
et non '&' seul. C'est une façon à éviter les ambiguités entre adresse et opérateur binaire. Fabien
Salut,
#define MIN(a,b) ((a) < (b) ? (a) : (b))
C'est une macro (c'est à dire que c'est replacé directement dans le code par
le compilo). '?' indique que la première partie est une condition et en
indique la fin et ':' separe les deux alternatives ce qui donne dans ton
cas : si a<b alors a sinon b.
#define MIN(a,b) ((a) < (b) ? (a) : (b)) C'est une macro (c'est à dire que c'est replacé directement dans le code par
le compilo). '?' indique que la première partie est une condition et en indique la fin et ':' separe les deux alternatives ce qui donne dans ton cas : si a<b alors a sinon b.
là j'ai un doute quant à la validité car normalement l'opérateur c'est '&&'
et non '&' seul. C'est une façon à éviter les ambiguités entre adresse et opérateur binaire. Fabien
Emmanuel Delahaye
In 'fr.comp.lang.c', (Noé Falzon) wrote:
Je suis en train de consulter une documentation sur l'API de mon système, et les exemple de ce tutorial sont en C. Cependant, j'ai vu apparaitre des opérateurs que je n'avais pas appris en C :
Et ton livre de C, il en pense quoi?
- & (seul entre deux variables en non pas collé devant une variable, comme pour récupérer son adresse)
C'est l'opérateur bit à bit 'AND' (ET). Il existe aussi
Comme je doute que les opérateurs ne puissent pas faire partie du C standard, je me posais des questions...
Dans ce cas, ouvrir son livre de C, ou consulter l'aide en ligne de son compilateur:
<Borland C>
__________________________________ Opérateur conditionnel ( ? : ) ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ L'opérateur conditionnel ?: est un opérateur ternaire..
Syntaxe: expr-OU-logique ? expr : expr-condition
Dans l'expression E1 ? E2 : E3, l'opérande E1 doit être de type scalaire. Les opérandes E1 et E3 doivent obéir à l'une des règles ci-dessous:
1. Tous deux sont de type arithmétique.
Dans ce cas, aussi bien E2 que E3 se voient appliquer les conversions arithmétiques habituelles et le type du résultat est le type commun résultant de la conversion.
2. Les deux opérandes sont de type structure ou union compatibles.
Dans ce cas le type du résultat est le type de la structure de E2 et E3.
3. Les deux opérandes sont de type void.
Dans ce cas le résultat est de type void.
4. Les deux opérandes sont de type pointeur sur une version qualifiée ou non de types compatibles.
Dans ce cas le type du résultat est un pointeur sur un type qualifié par tous les types qualifiés des types pointés par les opérandes.
5. Un opérande est de type pointeur et l'autre une constante pointeur nulle.
Dans ce cas, le type du résultat est un pointeur sur un type qualifié par rapport à tous les types qualifiés des types pointés par les opérandes.
6. Un opérande est de type pointeur sur un objet ou un type incomplet, l'autre étant un pointeur sur une version qualifiée ou non du type void.
Dans ce cas le type du résultat est celui de l'opérande qui n'est pas pointeur sur void.
Dans tous les cas E1 est évalué en premier. Si la valeur est différente de 0, E2 est évalué et E3 est ignoré. Si E1 est égal à 0, E3 est évalué mais E2 ne l'est pas.
Le résultat de E1 ? E2 : E3 correspond à la valeur de E2 ou de E3 suivant le cas.
______________________________________________ Opérateurs logiques et sur bits & ^ | && || ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Turbo C++ fournit 5 opérateurs permettant de manipuler les opérations au niveau du bit:
& ET entre bit ^ OU exclusif entre bit | OU entre bit
A l'inverse des opérateurs au niveau du bit, les opérateurs logiques && et || garantissent une opération de gauche à droite.
E1 est évalué en premier; s'il est égal à 0, E1 && E2 renvoient 0 et E2 n'est pas évalué.
Dans le cas de E1 || E2, si E1 est différent de 0, l'expression complète renvoie 1 et E2 n'est pas évaluée.
Voir Aussi: opérateur </>
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', PASDEPUBnoe.falzon@tiscali.fr (Noé Falzon) wrote:
Je suis en train de consulter une documentation sur l'API de mon
système, et les exemple de ce tutorial sont en C. Cependant, j'ai vu
apparaitre des opérateurs que je n'avais pas appris en C :
Et ton livre de C, il en pense quoi?
- & (seul entre deux variables en non pas collé devant une variable,
comme pour récupérer son adresse)
C'est l'opérateur bit à bit 'AND' (ET). Il existe aussi
Comme je doute que les opérateurs ne puissent pas faire partie du C
standard, je me posais des questions...
Dans ce cas, ouvrir son livre de C, ou consulter l'aide en ligne de son
compilateur:
<Borland C>
__________________________________
Opérateur conditionnel ( ? : )
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
L'opérateur conditionnel ?: est un opérateur ternaire..
Syntaxe:
expr-OU-logique ? expr : expr-condition
Dans l'expression E1 ? E2 : E3, l'opérande E1 doit être de type scalaire.
Les opérandes E1 et E3 doivent obéir à l'une des règles ci-dessous:
1. Tous deux sont de type arithmétique.
Dans ce cas, aussi bien E2 que E3 se
voient appliquer les conversions arithmétiques
habituelles et le type du résultat est le type
commun résultant de la conversion.
2. Les deux opérandes sont de type structure ou union
compatibles.
Dans ce cas le type du résultat est le type de la
structure de E2 et E3.
3. Les deux opérandes sont de type void.
Dans ce cas le résultat est de type void.
4. Les deux opérandes sont de type pointeur
sur une version qualifiée ou non de types
compatibles.
Dans ce cas le type du résultat est un pointeur
sur un type qualifié par tous les types qualifiés
des types pointés par les opérandes.
5. Un opérande est de type pointeur et l'autre une
constante pointeur nulle.
Dans ce cas, le type du résultat est un pointeur
sur un type qualifié par rapport à tous les
types qualifiés des types pointés par les opérandes.
6. Un opérande est de type pointeur sur un objet ou
un type incomplet, l'autre étant un pointeur sur
une version qualifiée ou non du type void.
Dans ce cas le type du résultat est celui de
l'opérande qui n'est pas pointeur sur void.
Dans tous les cas E1 est évalué en premier. Si la valeur est différente de
0, E2 est évalué et E3 est ignoré. Si E1 est égal à 0, E3 est évalué mais E2
ne l'est pas.
Le résultat de E1 ? E2 : E3 correspond à la valeur de E2 ou de E3 suivant le
cas.
______________________________________________
Opérateurs logiques et sur bits & ^ | && ||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Turbo C++ fournit 5 opérateurs permettant de manipuler les opérations au
niveau du bit:
& ET entre bit
^ OU exclusif entre bit
| OU entre bit
Je suis en train de consulter une documentation sur l'API de mon système, et les exemple de ce tutorial sont en C. Cependant, j'ai vu apparaitre des opérateurs que je n'avais pas appris en C :
Et ton livre de C, il en pense quoi?
- & (seul entre deux variables en non pas collé devant une variable, comme pour récupérer son adresse)
C'est l'opérateur bit à bit 'AND' (ET). Il existe aussi
Comme je doute que les opérateurs ne puissent pas faire partie du C standard, je me posais des questions...
Dans ce cas, ouvrir son livre de C, ou consulter l'aide en ligne de son compilateur:
<Borland C>
__________________________________ Opérateur conditionnel ( ? : ) ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ L'opérateur conditionnel ?: est un opérateur ternaire..
Syntaxe: expr-OU-logique ? expr : expr-condition
Dans l'expression E1 ? E2 : E3, l'opérande E1 doit être de type scalaire. Les opérandes E1 et E3 doivent obéir à l'une des règles ci-dessous:
1. Tous deux sont de type arithmétique.
Dans ce cas, aussi bien E2 que E3 se voient appliquer les conversions arithmétiques habituelles et le type du résultat est le type commun résultant de la conversion.
2. Les deux opérandes sont de type structure ou union compatibles.
Dans ce cas le type du résultat est le type de la structure de E2 et E3.
3. Les deux opérandes sont de type void.
Dans ce cas le résultat est de type void.
4. Les deux opérandes sont de type pointeur sur une version qualifiée ou non de types compatibles.
Dans ce cas le type du résultat est un pointeur sur un type qualifié par tous les types qualifiés des types pointés par les opérandes.
5. Un opérande est de type pointeur et l'autre une constante pointeur nulle.
Dans ce cas, le type du résultat est un pointeur sur un type qualifié par rapport à tous les types qualifiés des types pointés par les opérandes.
6. Un opérande est de type pointeur sur un objet ou un type incomplet, l'autre étant un pointeur sur une version qualifiée ou non du type void.
Dans ce cas le type du résultat est celui de l'opérande qui n'est pas pointeur sur void.
Dans tous les cas E1 est évalué en premier. Si la valeur est différente de 0, E2 est évalué et E3 est ignoré. Si E1 est égal à 0, E3 est évalué mais E2 ne l'est pas.
Le résultat de E1 ? E2 : E3 correspond à la valeur de E2 ou de E3 suivant le cas.
______________________________________________ Opérateurs logiques et sur bits & ^ | && || ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Turbo C++ fournit 5 opérateurs permettant de manipuler les opérations au niveau du bit:
& ET entre bit ^ OU exclusif entre bit | OU entre bit
là j'ai un doute quant à la validité car normalement l'opérateur c'est
'&&' et non '&' seul. C'est une façon à éviter les ambiguités entre adresse et opérateur binaire.
C'est valide, l'opérateur '&' effectue un "et" bit à bit. Ne pas confondre avec le "et" logique ( && ). Bref c'est un masque comme l'indique le nom de la variable.
là j'ai un doute quant à la validité car normalement l'opérateur c'est
'&&' et non '&' seul. C'est une façon à éviter les ambiguités entre
adresse et opérateur binaire.
C'est valide, l'opérateur '&' effectue un "et" bit à bit. Ne pas
confondre avec le "et" logique ( && ). Bref c'est un masque comme
l'indique le nom de la variable.
là j'ai un doute quant à la validité car normalement l'opérateur c'est
'&&' et non '&' seul. C'est une façon à éviter les ambiguités entre adresse et opérateur binaire.
C'est valide, l'opérateur '&' effectue un "et" bit à bit. Ne pas confondre avec le "et" logique ( && ). Bref c'est un masque comme l'indique le nom de la variable.
PASDEPUBnoe.falzon
Emmanuel Delahaye wrote many things...
<.../...>
Ben mon bouquin sur le C n'était pas entré dans ces détails, malheuresement.
En tout cas merci beaucoup !
-- "Je ne deteste que les bourreaux" -- Albert Camus
Pour m'écrire, veuillez enlever PASDEPUB de mon adresse ;P
Emmanuel Delahaye <emdelYOURBRA@noos.fr> wrote many things...
<.../...>
Ben mon bouquin sur le C n'était pas entré dans ces détails,
malheuresement.
En tout cas merci beaucoup !
--
"Je ne deteste que les bourreaux" -- Albert Camus
Pour m'écrire, veuillez enlever PASDEPUB de mon adresse ;P