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

  FORUM HardWare.fr
  Programmation
  C++

  signed ou unsigned ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

signed ou unsigned ?

n°271127
blackgodde​ss
vive le troll !
Posté le 17-12-2002 à 09:44:38  profilanswer
 

Bonjour,
 
qd on délcare un long, un short, est-ce un signé ou non-signé ?
 

Code :
  1. long l <=> unsigned long l
  2. ou
  3. long l <=> signed long l
  4. (pareil pour short)


 
 
et pour un char ? (g lu un topic de Musaran la dessus), mais si on lit 1 char ds un fichier par exemple, sera-t-il lu comme un signé ou non ?


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 17-12-2002 à 09:44:38  profilanswer
 

n°271129
El_gringo
Posté le 17-12-2002 à 09:46:46  profilanswer
 

J'crois que c'est signé par défaut.
un char par contre, je dirais que c'est non-signé (à vérifier)

n°271157
BENB
100% Lux.
Posté le 17-12-2002 à 10:42:10  profilanswer
 

short et long sont signés par defaut
 
quand au char ca depend de l'implementation

n°271161
blackgodde​ss
vive le troll !
Posté le 17-12-2002 à 10:50:34  profilanswer
 

à ... qq1 c si (déjà short eet long sont bien signés sous VC++6, on m'a dit qu'il était peu respectueux de la norme) et ensuite si char est signé ou pas, tjs sous vc++6 ?


---------------
-( BlackGoddess )-
n°271204
Kristoph
Posté le 17-12-2002 à 11:43:36  profilanswer
 

Tu n'as qu'à faire le test :
 

Code :
  1. #include <iostream>
  2. int main()
  3. {
  4.    char c = (char)-1;
  5.    std::cout << "-1 ou 255 ? " << c;
  6.    return 0;
  7. }


n°271218
blackgodde​ss
vive le troll !
Posté le 17-12-2002 à 12:13:58  profilanswer
 

d'apres l'article de Musaran, ca me mettra -1 et ca le déclarera en non signé. Musaran disait qu'il se met tout seul en signé ou non signé suivant son utilisation. (si g bien compris ce qu'il avait dit)


---------------
-( BlackGoddess )-
n°271224
Kristoph
Posté le 17-12-2002 à 12:29:18  profilanswer
 

Citation :

quand au char ca depend de l'implementation


 
Quand j'y pense, ca ca veux dire qu'il ne faut pas en tenir compte. Donc si pour toi ca t'interresse de savoir si c'est signe ou non signe, c'est qu'il ne faut pas utiliser char mais "signed char" et "unsigned char".
 
Le comportement d'un compilateur particulier en s'en fout, ce qui compte c'est le standard :)

n°271244
blackgodde​ss
vive le troll !
Posté le 17-12-2002 à 12:54:02  profilanswer
 

bien, c noté, mci :)


---------------
-( BlackGoddess )-
n°271283
BENB
100% Lux.
Posté le 17-12-2002 à 13:58:38  profilanswer
 

Kristoph a écrit :

Citation :

quand au char ca depend de l'implementation


 
Quand j'y pense, ca ca veux dire qu'il ne faut pas en tenir compte. Donc si pour toi ca t'interresse de savoir si c'est signe ou non signe, c'est qu'il ne faut pas utiliser char mais "signed char" et "unsigned char".
 
Le comportement d'un compilateur particulier en s'en fout, ce qui compte c'est le standard :)


 
Oui enfin ce qui compte c'est ce que tu liveras a ton client en utilisant le compilo mis a ta disposition...

n°271480
Kristoph
Posté le 17-12-2002 à 15:06:32  profilanswer
 

Respecter les standards, c'est un gage de qualité et de vision à long terme. Et en plus ça fait gagné du temps car on ne se pose pas des questions inutiles comme dans ce cas :
 
Le standard dit, ça dépend. Moi je réponds : "OK, j'utilise alors autre chose pour lequel ça ne dépend pas au lieu de demander à mon compilo comment il fait". De plus, si demain tu applique le SPz de Microsoft et que tout à coup Visual se met à mieux respecter le standard, le code que tu avais écrit ne marcheras plus. Alors respect des standards avant tout.

mood
Publicité
Posté le 17-12-2002 à 15:06:32  profilanswer
 

n°271491
blackgodde​ss
vive le troll !
Posté le 17-12-2002 à 15:23:16  profilanswer
 

J'essaie, c pour ca que je pose bcp de questions sur la norme (et j'essaie d'eviter sur mon compilo)


---------------
-( BlackGoddess )-
n°271508
BENB
100% Lux.
Posté le 17-12-2002 à 15:33:27  profilanswer
 

Kristoph a écrit :

Respecter les standards, c'est un gage de qualité et de vision à long terme. Et en plus ça fait gagné du temps car on ne se pose pas des questions inutiles comme dans ce cas :
 
Le standard dit, ça dépend. Moi je réponds : "OK, j'utilise alors autre chose pour lequel ça ne dépend pas au lieu de demander à mon compilo comment il fait". De plus, si demain tu applique le SPz de Microsoft et que tout à coup Visual se met à mieux respecter le standard, le code que tu avais écrit ne marcheras plus. Alors respect des standards avant tout.


 
OK, donc tu ne fais jamais d'interfaces graphiques, tu n'utilises pas de multi-threading sous Win (pas POSIX)...
 
C'est quand meme tres limitatif non ?
 
Tu trouves des amateurs pour tes production en mode console :D
 
Serieusement, je suis d'accord sur le principe que il vaut mieux respecter le standard, mais quelques fois ce n'est pas possible...

n°271536
Kristoph
Posté le 17-12-2002 à 16:00:12  profilanswer
 

J'utilises le standard là où il existe ! Et quand il y a un problème entre les outils que j'utilises et le standard, autant que possible je choisis une solution qui reste définie par ce dernier plustot que de compter sur un comportement qui pourra être amené à changer dans une version ulterieure !
 
Et puis, utilises QT et tu auras de l'interface graphique portable, et tu auras du multithreading portable aussi :D

n°271605
blackgodde​ss
vive le troll !
Posté le 17-12-2002 à 16:45:03  profilanswer
 

si, vu ke en général je dev sous win, j'utilise les API et le multithreading, les interfaces graphiques je fais en API et g encore enormement de mal ... d'ailleurs si qq1 pouvait me filer des liens d'interfaces graphiques en API (sans MFC beuuuurk ni rien de ce genre)


---------------
-( BlackGoddess )-
n°271608
El_gringo
Posté le 17-12-2002 à 16:46:28  profilanswer
 

BlackGoddess a écrit :

si, vu ke en général je dev sous win, j'utilise les API et le multithreading, les interfaces graphiques je fais en API et g encore enormement de mal ... d'ailleurs si qq1 pouvait me filer des liens d'interfaces graphiques en API (sans MFC beuuuurk ni rien de ce genre)


Pourquoi MFC beuuuurk ?

n°271610
BENB
100% Lux.
Posté le 17-12-2002 à 16:48:38  profilanswer
 

Kristoph a écrit :

J'utilises le standard là où il existe ! Et quand il y a un problème entre les outils que j'utilises et le standard, autant que possible je choisis une solution qui reste définie par ce dernier plustot que de compter sur un comportement qui pourra être amené à changer dans une version ulterieure !
 
Et puis, utilises QT et tu auras de l'interface graphique portable, et tu auras du multithreading portable aussi :D


 
QT Ce n'est pas standard ! Et il y a d'autres bibliotheques dans ce style (wxwindows par exemple)...
 
Logiquement pour le multi-threading tu devrais suivre pthread (norme POSIX)...
 
Quand au standard, je suis d'accord c'est une reference, mais aucun compilo ne le respecte totalement...
 
donc mes prioritées sont :
 
1- Arriver au resultat car c'est pour cela qu'on me paye en premier lieu
2- respecter le standard quand il existe et est appliqué/applicable...

n°271628
blackgodde​ss
vive le troll !
Posté le 17-12-2002 à 17:00:24  profilanswer
 

j'm pas les MFC, c un avis personnel mais je supporte pas


---------------
-( BlackGoddess )-
n°272532
Musaran
Cerveaulté
Posté le 19-12-2002 à 01:32:57  profilanswer
 

BlackGoddess a écrit :

d'apres l'article de Musaran, ca me mettra -1 et ca le déclarera en non signé. Musaran disait qu'il se met tout seul en signé ou non signé suivant son utilisation. (si g bien compris ce qu'il avait dit)


T'as mal compris, ou mes explications sont mauvaises (où ça ?).
 
Les types numériques intégrés du C++:

Code :
  1. (les [] indiquent les termes implicites optionnels)
  2.          char //cas spécial
  3.   signed char
  4. unsigned char
  5. [signed] [int] //un des deux doit être présent
  6. unsigned [int]
  7. [signed] short [int]
  8. unsigned short [int]
  9. [signed] long [int]
  10. unsigned long [int]
  11. float
  12. double
  13. long double
  14. bool //utilisable comme entier valant 0 ou 1.


Plusieurs choses à remarquer:

  • Le signage ne peut être choisi que pour les entiers, sauf bool.


  • Le signage est 'signed' par defaut (sauf 'char';).


  • Le type 'char' est distinct de ses versions 'signed' et 'unsigned'. Arithmétiquement, il se comporte comme l'un ou l'autre, selon le compilateur.


  • Le vrai nom du type est celui avec tous les termes.

cout << typeid(short).name() << endl; //"signed short int" de son vrai nom
 
Donc, pour reprendre ton exemple:

Code :
  1. char c = (char)-1;


Soit 'char' est signé et ça marche.
Soit 'char' est non-signé et la valeur obtenue n'est pas définie par le standard. Ce serait probablement modulo 256 donnant 255.
 
Le cast sert uniquement à fermer son clapet au compilateur dans ce dernier cas.


Message édité par Musaran le 19-12-2002 à 01:33:35

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

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

  signed ou unsigned ?

 

Sujets relatifs
[VC++] unsigned char* / char* 
Plus de sujets relatifs à : signed ou unsigned ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)