Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
747 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Aide pour un noob

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide pour un noob

n°2112839
ada9956
Posté le 22-11-2011 à 21:11:30  profilanswer
 

Salut à tous !  
 
J'ai deux question a vous posé :  
La première étant : Est-il possible qu'une adresse soit négative ? Je pense bien que non mais bon ... a la vue de mon display
 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    long test = 0;
    printf("Choisir une valeur pour la variable Test :" );
    scanf("%d", &test);
    printf("la valeur de test vaut : %d \n", test);
    printf("La variable test ce trouve a %ld dans la mémoire RAM", &test);
    return 0;
}
 
Au derniers printf quand je veux lire l'adresse de ma variable dans ma mémoire, je me retrouve avec une valeur avec un "-" devant, ce qui m'a laissé un peu perplexe !
Exactement ceci : "-1081149812"
 
Qu'en pensé vous ?  
 
 
 
J'ai ensuite une deuxième question : %d, %ld, %f, %lf
 
Est ce quelqu'un pourrait me dire vite fait ce qu'il faut savoir la dessus ?
 
Je sais que %d renvoie une valeur non décimale, et %f oui, mais que c'est deux sont seulement utilisable dans un printf mais j'ai remarque que si je mettais %ld ca marcher quand meme ... Ce qui me laisse égualement perplexe  
 
 
Merci.

mood
Publicité
Posté le 22-11-2011 à 21:11:30  profilanswer
 

n°2112845
xilebo
noone
Posté le 22-11-2011 à 21:39:09  profilanswer
 

man printf ( http://www.linux-kheops.com/doc/ma [...] ntf.3.html )
 

Citation :


...
d, i
    L'argument int est convertie en un chiffre décimal signé. La précision, si elle est mentionné, correspond au nombre minimal de chiffres qui doivent apparaître. Si la conversion fournit moins de chiffres, le résultat est rempli à gauche avec des zéros. Par défaut la précision vaut 1. Lorsque 0 est converti avec une précision valant 0, la sortie est vide.  
 
...


 
Tu demandes à afficher un entier signé, c'est ce que printf fait.
 
Généralement, une adresse est exprimée en hexadécimal, il faut donc utiliser %X , tu peux mettre %08X pour l'afficher de taille fixe et correctement sur un système 32 bits.
 
edit : le "." était une faute de frappe.


Message édité par xilebo le 23-11-2011 à 08:01:34
n°2112849
ada9956
Posté le 22-11-2011 à 22:18:17  profilanswer
 

Je ne comprends pas très bien, les valeurs Hexa sont pas avec un "$" ?  
 
Les arguments qui suive "%" comment fonctionne-t-il ?  
J'ai lu le manuel mais c'est un peu cru :s

n°2112857
gilou
Modérateur
Modzilla
Posté le 22-11-2011 à 22:45:45  profilanswer
 

Citation :

Je ne comprends pas très bien, les valeurs Hexa sont pas avec un "$" ?  

Comment voudrais tu que cela soit, avec un $, qu'on comprenne ta question??
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2112943
ada9956
Posté le 23-11-2011 à 13:27:49  profilanswer
 

Je précise "noob" et tu me donnes des infos mal expliqué, je redemande des infos et tu me dis A+ ...  En plus tu réponds a une question sur deux ...
 
La ya du modérateur ! Si tu comptes pas m'aider réponds meme pas a mon post j'm'en porterai bcp mieux.  
 
Peace

n°2112955
gilou
Modérateur
Modzilla
Posté le 23-11-2011 à 13:58:21  profilanswer
 

Je te demande de préciser ta question, parce que c'est pas clair (ben oui, si le rapport entre de l'hexa et un $ est clair à tes yeux, ce ne l'est pas aux yeux des autres), et pour répondre à une question, encore faut il qu'elle soit claire, et voila comment tu réagis?
Tu as même pas l'air d'avoir remarqué que xilebo et moi, c'est pas pareil (> "tu me donnes des infos mal expliquées" alors que j'ai donné aucune info, puisque j'attendais la clarification pour pouvoir en donner).
Ben c'est mon premier et dernier avertissement, si tu changes pas de comportement, tu vas pas faire de vieux os dans cette section.
A bon entendeur, et
A+,


Message édité par gilou le 23-11-2011 à 14:04:56

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2112962
mohoi
Posté le 23-11-2011 à 14:21:28  profilanswer
 

Bonjour,
 
Il faut imaginé la mémoire comme un grand damier. Chaque case ont pour adresse une valeur hexadécimal.
 
Or l'argument de formatage "%d" signifie que l'argument que tu passera a printf sera interprété comme étant un ENTIER!
 
Donc si tu passe d'un hexadécimal a un entier, il est fort probable que le résultat soit farfelue.
 
Les entiers se base sur le système décimal et non hexadécimal.
 
Pour cela, tu dois utiliser le formatage "%x" et "%X".
 
x : 0123456789abcdef
 
X : 0123456789ABCDEF
 
Ensuite, %d signifie "int" et "%ld" signifie "long int".
 
Un "int" sur les processeur 16 bits est égal a 2 octets de mémoire, et 4 octets sur les 32 bits.
Un "long int", que le processeur soit 16 ou 32 bit, est égal a 4 octet.
 
Il était important de savoir quelle variable utiliser, avant, en fonction du nombre sur les 16 bits.
 
Mais, maintenant la plupart des processeurs sont 32bit ou 64bits. Donc un "int" et un "long int" ont exactement la même taille en mémoire.
 
Ce qui explique pourquoi printf ne fait pas de distinction entre "%ld" et "%d".

n°2112971
ada9956
Posté le 23-11-2011 à 14:56:32  profilanswer
 

Merci Mohoi


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Aide pour un noob

 

Sujets relatifs
Noob en JS et besoin d'aide!Besoin d'aide pour un futur site > defilement photos (noob)
noob recherche aide c++aide pour noob svp
[SQL/NOOB] cherche de l'aide sur un projet de base de données[ Besoin D'AIDE ! ] Quelques lignes de code Svp. ( noob )
noob en htlm besoin d'aide Aide pour Programme de génération aléatoire de texte (Noob)
noob cherche desesperament de l'aide[nOOb] Besoin d'aide pour activation PHP-Nuke
Plus de sujets relatifs à : Aide pour un noob


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR