IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Quelques questions avant d'essayer de coder en C [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Quelques questions avant d'essayer de coder en C
    Bonjour tout le monde,

    Je suis débutant en C mais pas en programmation (j'ai étudié pendant un an JAVA et je connais un peu VB et VBA).

    Pour me préparer à un cours que j'aurai à partir de septembre, j'aimerais vous poser quelques questions sur ce langage :

    Les informations ci-dessous proviennent du cours que j'aurais à partir de septembre :

    Toute donnée en C/C++ est numérique
    Il n'existe donc pas de String ?

    Je vois aussi que le type char va de -128 à 127, ce n'est donc pas comme en JAVA où on déclare une variable de type comme ceci :

    La différence entre signed et unsigned c'est que unsigned n'accepte pas d'élément négatif ?

    Pour les int, je vois qu'il y'a ceci :

    =taille d'une adresse mémoire (actuellement - VC6) : 4
    Comment on peut expliquer ceci ?

    Je vois aussi qu'il y'a une partie caractère et dans cette partie se trouve char (code ASCII) -128 --> 127, c'est donc la table ASCII ? Il y'a des chiffres négatifs dans cette table ?

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par beegees Voir le message
    Toute donnée en C/C++ est numérique
    Si le cours comporte la mention C/C++, c'est deja mal parti. Ce sont deux langages differents, qu'il convient de ne pas melanger. De plus, l'affirmation n'est pas vraiment fausse (puisque les caracteres sont en fait des entiers), mais on ne se demande a quoi elle peut bien servir...

    Il n'existe donc pas de String ?
    En C, non. Une chaine de caractere est un tableau de caractere termine par '\0'.

    en JAVA où on déclare une variable de type comme ceci :

    Meme chose en C. La notation 'c' est convertie en l'entier correspondant a la lettre C dans le jeu de caractere utilise.

    La différence entre signed et unsigned c'est que unsigned n'accepte pas d'élément négatif ?
    Ben oui.

    Pour les int, je vois qu'il y'a ceci : =taille d'une adresse mémoire (actuellement - VC6) : 4
    Cela depend de la plateforme. Le C exige de couvrir une plage de valeurs, pas d'occuper une certaine taille en memoire.


    Je vois aussi qu'il y'a une partie caractère et dans cette partie se trouve char (code ASCII) -128 --> 127, c'est donc la table ASCII ? Il y'a des chiffres négatifs dans cette table ?
    La partie 'universelle' du code ASCII n'occupe que 7 bits, soit 128 valeurs, donc peut etre mise dans un caractere signe.

  3. #3
    Membre confirmé Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par défaut
    Citation Envoyé par beegees Voir le message
    Bonjour tout le monde,
    Il n'existe donc pas de String ?
    Toute donnée étant constituée de bits, soit 0 ou 1, c'est valable dans n'importe quel langage.
    Une string est une série de char, qui sont des valeurs numérique qui ont une correspondance à un caractère via la table ASCII.

    Que tu déclares :
    ou
    est parfaitement identique.


    La différence entre signed et unsigned c'est que unsigned n'accepte pas d'élément négatif ?
    Exact. Cela change donc la plage des nombres. Un signed char a une plage qui va de -128 à 127, on a unsigned char va de 0 à 255.

    Suivant les platesformes, les valeurs sont codés sur un nombre différent d'octets. Une série courante est la suivante :
    Char sur 1 octet.
    Short sur 2 octets.
    int sur 4 octets
    long sur 4 ou 8 octets.

    Mais ces valeurs dépendent de la plateforme.


    Concernant l'histoire des char, j'ai déjà pas mal expliqué avant. La table ASCII va de 0 à 128, et la table étendue de 0 à 255.

    Edit : Grilled, mais mon message peut servir de complément ^^

  4. #4
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Bonjour à vous deux,

    Merci beaucoup pour vos explications.

    Je reviendrai régulièrement sur ce post pour relire vos informations qui sont bien utiles.

    Merci encore.

    beegees

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Beldom Voir le message

    Suivant les platesformes, les valeurs sont codés sur un nombre différent d'octets. Une série courante est la suivante :
    Char sur 1 octet.
    Short sur 2 octets.
    int sur 4 octets
    long sur 4 ou 8 octets.

    Mais ces valeurs dépendent de la plateforme.
    Salut,

    Comme l'a précisé DaZumba, la norme qui définit le langage C ne parle pas en terme de bits ou d'octets, mais définit des plages de valeurs qui doivent pouvoir être représentées par les type en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    signed short int: -32767 à 32767 [-(2^15 - 1) à 2^15 - 1]
    unsigned short int: 0 à 65535 (0 à 2^16 - 1)
    signed int: -32767 à 32767
    unsigned int: 0 à 65535
    signed long int: -(2^31 - 1) à 2^31 - 1
    signed long long int: -(2^63 - 1) à 2^63 - 1
    Par ailleurs, la suituation suivante doit être vérifiée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sizeof(char) == 1
    sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
    Voilà, c'était juste ma modeste contribution en complément de ce qui a déjà été dit.

    Salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Merci beaucoup Thierry,

    C'est un complément intéressant.

    Je vais apprendre les bases du codages en C (pas de la programmation) et je reviens sur ce post.

    Merci encore.

    beegees

  7. #7
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par mujigka Voir le message
    Salut,

    Comme l'a précisé DaZumba, la norme qui définit le langage C ne parle pas en terme de bits ou d'octets, mais définit des plages de valeurs qui doivent pouvoir être représentées par les type en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    signed short int: -32767 à 32767 [-(2^15 - 1) à 2^15 - 1]
    unsigned short int: 0 à 65535 (0 à 2^16 - 1)
    signed int: -32767 à 32767
    unsigned int: 0 à 65535
    signed long int: -(2^31 - 1) à 2^31 - 1
    signed long long int: -(2^63 - 1) à 2^63 - 1
    Par ailleurs, la suituation suivante doit être vérifiée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sizeof(char) == 1
    sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
    Voilà, c'était juste ma modeste contribution en complément de ce qui a déjà été dit.

    Salutations

    Thierry
    Salut,
    Est-ce sur que la norme parle de telles plages?

    car sur PC 64bits, un long est sur 64bits (donc + ou - 2^63), à moins que la tranche + ou - 2^31 soit respectée malgré le fait que la donnée soit dans un mot 64bits, j'ai pas vérifié.

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Gruik Voir le message
    Salut,
    Est-ce sur que la norme parle de telles plages?

    car sur PC 64bits, un long est sur 64bits (donc + ou - 2^63), à moins que la tranche + ou - 2^31 soit respectée malgré le fait que la donnée soit dans un mot 64bits, j'ai pas vérifié.
    Je cite mes sources: paragraphe 5.2.4.2.1 de la norme. L'implantation est libre de représenter, par exemple, un entier de type long comme elle l'entend sans contrainte au niveau du nombre de bits utilisés ou au niveau de la représentation du signe (complément à deux, bit de signe, etc). Toutefois, une implantation conforme doit assurer que le type signed long est capable de représenter un entier dont la valeur est comprise entre LONG_MAX et LONG_MIN dont la valeur est au moins +2147483647 (2^31-1) et -2147483647, respectivement.

    Maintenant, rien n'empêche que sur PC 64 bits, un entier de type long soit représenté sur 64 bits.

    N'hésitez pas à me reprendre si je fait une erreur d'interprétation.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Gruik Voir le message
    Est-ce sur que la norme parle de telles plages?
    Oui. Il s'agit des valeurs minimales garanties par le langage (donc gages de portabilité). Ca peut évidemment être plus sur certaines plateforme, mais ce n'est, par définition, pas portable.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quelques dernières question avant de se lancer
    Par xxkirastarothxx dans le forum Général Python
    Réponses: 8
    Dernier message: 24/03/2009, 16h46
  2. [Débutant]Quelques questions de principe sur l'API win32
    Par silver_dragoon dans le forum Windows
    Réponses: 4
    Dernier message: 19/03/2004, 18h38
  3. [install]Install sous windows... quelques questions
    Par omega dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 26/02/2004, 09h50
  4. [MFC] Quelques questions de débutant...
    Par Sephi dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2004, 17h25
  5. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo