Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/07/2019, à 13:35

chris7522

type et valeur d'une expression C

Bonjour a tous ,
Je ne comprends pas le resultat de cette expression :
Soit :
long q=2;
int n=10;
Quel est le type et la valeur de :
q && n
Le resultat est = int 1
Je sais que lors d'une conversion d'ajustement de type , un int se converti en long et que le && verifie que toutes les conditions sont realisê mais pourquoi cette reponse ? Je ne comprends pas .
Merci de votre aide

Hors ligne

#2 Le 24/07/2019, à 13:41

rogn...

Re : type et valeur d'une expression C

Et si tu essayes avec q = 0 ?

#3 Le 24/07/2019, à 13:59

NicoApi73

Re : type et valeur d'une expression C

Bonjour,

FALSE correspond à une valeur nulle, là tu fais un ET logique entre 2 valeurs non nulles (donc TRUE) et le résultat et TRUE (soit une valeur non-nulle, 1 en l'occurence)

Hors ligne

#4 Le 24/07/2019, à 15:26

chris7522

Re : type et valeur d'une expression C

Ok , bien compris pour les valeurs nulle ou non nulle . Et si j'essaie avec q=0 , j'obtiens int 0 , c'est ca ?

Hors ligne

#5 Le 24/07/2019, à 15:30

rogn...

Re : type et valeur d'une expression C

Ben teste...

#6 Le 24/07/2019, à 15:35

NicoApi73

Re : type et valeur d'une expression C

Oui.

A partir du moment où (au moins) une des variables vaut 0, le résultat sera toujours 0, sinon, si les deux sont non nulles,  le résultat vaut 1.

Vu que c'est une évaluation booléenne, il faudrait plutôt dire que dès que l'un vaut FALSE, le résultat sera FALSE.

Hors ligne

#7 Le 24/07/2019, à 15:50

chris7522

Re : type et valeur d'une expression C

Ok merci a vous deux !  Une derniere pour la route si je peux me permettre .
n etant de type int , ecrire une expression qui prend la valeur :
-1 si n est negatif
0 si n est nul
1 si n est positif
Ca donnerai quoi pour vous ?

Hors ligne

#8 Le 24/07/2019, à 15:55

rogn...

Re : type et valeur d'une expression C

En pseudo code :
fonction retourValue (int n) : INT
{
si (n<0) retourner -1
sinon si (n = NULL) retourner 0
sinon retourner 1
retourner NULL
}

Attention, NULL n'est pas 0 !

Dernière modification par rogn... (Le 24/07/2019, à 15:58)

#9 Le 24/07/2019, à 16:32

chris7522

Re : type et valeur d'une expression C

Ha oui ! Merci
Dans le bouquin , ils me disent :
n ? (n>0 ? 1 : -1) : 0)
C'est chaud pour moi , je comprends pas la signification du :   n ?  au debut de l'expression , c'est une condition ?

Hors ligne

#10 Le 24/07/2019, à 18:29

NicoApi73

Re : type et valeur d'une expression C

Je ne connais pas ce type de code. En C, ça donnerait, n étant la variable à évaluer (de type int) et res la valeur de retour (également de type int) :

if (n >=0)
{
	if (n == 0)
		res = 0;
	else 
		res = 1;
}
else
	res = -1;

Tu peux le simplifier

Hors ligne

#11 Le 24/07/2019, à 18:36

Nuliel

Re : type et valeur d'une expression C

C'est une condition ternaire, c'est de la forme

condition ? Alors : Sinon

C'est pas très lisible, le n tout seul c'est un équivalent de "si n!=0" je pense

Hors ligne

#12 Le 24/07/2019, à 18:47

pingouinux

Re : type et valeur d'une expression C

Bonsoir,

chris7522 #9 a écrit :

n ? (n>0 ? 1 : -1) : 0)
C'est chaud pour moi , je comprends pas la signification du :   n ?  au debut de l'expression , c'est une condition ?

condition ? valeur_si_condition_vraie : valeur_si_condition_fausse

C'est une syntaxe utilisée notamment dans bash, awk et C (liste non exhaustive).

Hors ligne

#13 Le 24/07/2019, à 18:59

NicoApi73

Re : type et valeur d'une expression C

Effectivement, je ne connaissais pas :
https://www.commentcamarche.net/content … tionnelles

Hors ligne

#14 Le 24/07/2019, à 19:08

chris7522

Re : type et valeur d'une expression C

Merci a tous de votre aide et arrangez vous pour ne pas claquer avec cette canicule , votre aide m'est precieuse !

Hors ligne

#15 Le 24/07/2019, à 19:17

NicoApi73

Re : type et valeur d'une expression C

Merci Naziel et pingouinux vous m'avez appris quelque chose. @Naziel : j'ai trouvé l'explication dans mon livre sur le C++ (il a utilisé le terme d'opérateur conditionnel) :
Voici le code, n étant le nombre à évaluer, le résultat de l'évaluation mis dans res

res = n < 0 ? -1 : (n > 0 ? 1 : 0);

Dernière modification par NicoApi73 (Le 24/07/2019, à 19:18)

Hors ligne

#16 Le 24/07/2019, à 19:36

Nuliel

Re : type et valeur d'une expression C

Oui, au lieu de tester d'abord si n!=0, là tu testes si n<0 en premier. Je suis pas trop fan de cette forme, je la trouve peu lisible

Hors ligne

#17 Le 24/07/2019, à 20:02

chris7522

Re : type et valeur d'une expression C

Ce qui est entre parenthese n'est pas prioritaire du coup  ?

Hors ligne

#18 Le 24/07/2019, à 20:44

NicoApi73

Re : type et valeur d'une expression C

Sauf erreur de ma part, non.  C'est évalué de gauche à droite, de la forme si sinon. Les parenthèses permettant d'avoir le résultat du sinon.
Je préfère également la forme if then else et les accolades

Hors ligne

#19 Le 24/07/2019, à 20:46

Nuliel

Re : type et valeur d'une expression C

Effectivement, je viens de tester, et sans le parenthèses, ça marche aussi. Pour la lisibilité les parenthèses c'est bien! Mais c'est toujours aussi peu lisible smile

Dernière modification par Nuliel (Le 24/07/2019, à 20:46)

Hors ligne

#20 Le 24/07/2019, à 21:53

NicoApi73

Re : type et valeur d'une expression C

Ouaip, c'est ça que tu as essayé? :

res = n ? n > 0 ? 1 : -1 : 0;

Certains trouveront ça joli...

EDIT : c'est effectivement ce qu'il y a dans le livre de chris7522, vu en #9
De gauche à droite : si n est vrai (c'est à dire non nul) alors si n est positif renvoyer 1, sinon -1 (n est négatif) sinon 0 (n est faux, donc nul, relatif au premier ? )

Dernière modification par NicoApi73 (Le 24/07/2019, à 22:10)

Hors ligne

#21 Le 24/07/2019, à 22:15

Nuliel

Re : type et valeur d'une expression C

J'ai supprimé mon test, de mémoire c'est ce que j'ai fait. Oui je pense que 0 est relatif à la première condition même sans les parenthèses

Hors ligne

#22 Le 25/07/2019, à 06:19

rogn...

Re : type et valeur d'une expression C

Naziel a écrit :

Oui, au lieu de tester d'abord si n!=0, là tu testes si n<0 en premier. Je suis pas trop fan de cette forme, je la trouve peu lisible

Et celle-ci, c'est plus lisible ? tongue

int testVal (int a){
	if (a < 0){return -1;};
	return (a>0);
}

Dernière modification par rogn... (Le 25/07/2019, à 06:21)

#23 Le 25/07/2019, à 06:34

serged

Re : type et valeur d'une expression C

Ça dépend du processeur...

En 32 bits, int et long sont la même chose (32 bits signé), en 64 bits, je suppose que c'est 64 bits. Ce n'est qu'en 16 bits que int vaut 16 bits et long 32 bits.


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne