Contenu | Rechercher | Menus

Annonce

Ubuntu-fr vend de superbes t-shirts et de belles clés USB 32Go
Rendez-vous sur la boutique En Vente Libre

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 ?


Manjaro MATE (PC Prod + SFTP), VM Manjaro XFCE (Serveur Nextcloud + SSH), VM Ubuntu 20.04 (Testing). Tout mon réseau local est ici : https://github.com/officialrogn/conf/bl … raffic.pdf
/* Taxé de pignouf parce que je fais du second degré, et de fumé parce que j'ai un avis différent. */

En ligne

#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...


Manjaro MATE (PC Prod + SFTP), VM Manjaro XFCE (Serveur Nextcloud + SSH), VM Ubuntu 20.04 (Testing). Tout mon réseau local est ici : https://github.com/officialrogn/conf/bl … raffic.pdf
/* Taxé de pignouf parce que je fais du second degré, et de fumé parce que j'ai un avis différent. */

En ligne

#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)


Manjaro MATE (PC Prod + SFTP), VM Manjaro XFCE (Serveur Nextcloud + SSH), VM Ubuntu 20.04 (Testing). Tout mon réseau local est ici : https://github.com/officialrogn/conf/bl … raffic.pdf
/* Taxé de pignouf parce que je fais du second degré, et de fumé parce que j'ai un avis différent. */

En ligne

#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

Naziel

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


[ poster correctement un retour de commande ] [ poster correctement une photo ]
Nouvel adhérent FDN
thinkpad x220, Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Pour reprendre le contrôle des semences: https://kokopelli-semences.fr/fr/

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).

En 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

Naziel

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


[ poster correctement un retour de commande ] [ poster correctement une photo ]
Nouvel adhérent FDN
thinkpad x220, Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Pour reprendre le contrôle des semences: https://kokopelli-semences.fr/fr/

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

Naziel

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 Naziel (Le 24/07/2019, à 20:46)


[ poster correctement un retour de commande ] [ poster correctement une photo ]
Nouvel adhérent FDN
thinkpad x220, Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Pour reprendre le contrôle des semences: https://kokopelli-semences.fr/fr/

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

Naziel

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


[ poster correctement un retour de commande ] [ poster correctement une photo ]
Nouvel adhérent FDN
thinkpad x220, Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Pour reprendre le contrôle des semences: https://kokopelli-semences.fr/fr/

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)


Manjaro MATE (PC Prod + SFTP), VM Manjaro XFCE (Serveur Nextcloud + SSH), VM Ubuntu 20.04 (Testing). Tout mon réseau local est ici : https://github.com/officialrogn/conf/bl … raffic.pdf
/* Taxé de pignouf parce que je fais du second degré, et de fumé parce que j'ai un avis différent. */

En ligne

#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.


Linux-Mint 19.2 Tina 64 (Cinnamon) sur ASUS F2A55/AMD A8-5600K APU et diverses machines

Hors ligne