signed ou unsigned ?

signed ou unsigned ? - C++ - Programmation

Marsh Posté le 17-12-2002 à 09:44:38    

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

Marsh Posté le 17-12-2002 à 09:44:38   

Reply

Marsh Posté le 17-12-2002 à 09:46:46    

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

Reply

Marsh Posté le 17-12-2002 à 10:42:10    

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

Reply

Marsh Posté le 17-12-2002 à 10:50:34    

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

Marsh Posté le 17-12-2002 à 11:43:36    

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


Reply

Marsh Posté le 17-12-2002 à 12:13:58    

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

Marsh Posté le 17-12-2002 à 12:29:18    

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

Reply

Marsh Posté le 17-12-2002 à 12:54:02    

bien, c noté, mci :)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 17-12-2002 à 13:58:38    

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

Reply

Marsh Posté le 17-12-2002 à 15:06:32    

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.

Reply

Marsh Posté le 17-12-2002 à 15:06:32   

Reply

Marsh Posté le 17-12-2002 à 15:23:16    

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


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 17-12-2002 à 15:33:27    

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

Reply

Marsh Posté le 17-12-2002 à 16:00:12    

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

Reply

Marsh Posté le 17-12-2002 à 16:45:03    

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

Marsh Posté le 17-12-2002 à 16:46:28    

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 ?

Reply

Marsh Posté le 17-12-2002 à 16:48:38    

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

Reply

Marsh Posté le 17-12-2002 à 17:00:24    

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


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 19-12-2002 à 01:32:57    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed