Une question peut être bête : reconnaitre nombre binaire - C - Programmation
Marsh Posté le 03-05-2011 à 23:49:59
Quand c'est mis en quartet, le bit de singe est séparé des autres.
C'est une question de notation.
Marsh Posté le 04-05-2011 à 00:16:49
rahela a écrit : Bonsoir ! comment reconnait-on, le nombre 1111 1111 1111 1111 s'il est positif ou négatif? |
Faut connaitre son type, savoir si c'est signé ou non (et savoir sur combien de bits ça tient, parce que si c'est de l'int32, ben c'est 65535 que ce soit signé ou non).
Accessoirement, pour les négatifs, il faut aussi connaitre le schéma de négation (le mode de représentation des nombres signés), c'est généralement du complément à 2 parce que c'est ce qui est implémenté en matériel, mais pas nécessairement.
Marsh Posté le 04-05-2011 à 11:43:19
je ne comprends pas très très bien l'histoire des signés et non signés..
voila, j'ai un fichier binaire, contenant des instructions codées sur 5 octets : parmis ces 5 octets, j'extraie les deux suivants : 00111111 11111110
Dans mon programme, je veux extraire les 13 derniers bits : 001 1 1111 1111 1110,
je sais que ce nombre 1 1111 1111 1110 doit être -2 mais quand je l'affiche je vois 8190 .... comment faire ?
Marsh Posté le 04-05-2011 à 15:22:26
Joel, le bit de signe est le 13ieme, tu en connais beaucoup de machines qui utilisent directement une telle representation?
Rehela, si tu as des manips de ce genre a faire, tu as interet a chercher a comprendre la difference entre valeur et representation. Pour le cas present:
Code :
|
Marsh Posté le 04-05-2011 à 15:25:18
han j'avais pas lu XD
il le colle dans un entier 16 bit et decale le dernier bit en bit 15 ???
Marsh Posté le 04-05-2011 à 15:49:05
Joel F a écrit : il le colle dans un entier 16 bit et decale le dernier bit en bit 15 ??? |
Si tu veux dire
Code :
|
A noter que le cast est necessaire a cause des promotions qui font que v << 3 est calcule en int qui font souvent 32 bits.
On est dans le domaine du defini par l'implementation, a la fois pour l'existance d'un int16_t et pour le comportement du decalage a droite de valeurs signees (bon, je n'en connais pas qui ne conservent pas le signe et je viens de tester x86, sparc, power, alpha et PA-RISC).
Marsh Posté le 04-05-2011 à 15:51:57
Ça peut pas se faire avec des bit fields sinon, comme en erlang
Un Programmeur a écrit : On est dans le domaine du defini par l'implementation, a la fois pour l'existance d'un int16_t |
C'est demandé par c99 quand même
Un Programmeur a écrit : et pour le comportement du decalage a droite de valeurs signees |
De toute manière t'es déjà dans le domaine de l'UB quand aux négatifs étant du 2-complement non?
Marsh Posté le 04-05-2011 à 16:14:30
masklinn a écrit : Ça peut pas se faire avec des bit fields sinon, comme en erlang |
Si bien sur :-)
Code :
|
masklinn a écrit : |
Les intN_t sont tous optionels. Si la machine dispose d'un type 8, 16, 32, 64 bits, intN_t est alors obligatoire.
masklinn a écrit : |
Defini par l'implementation a nouveau pour le sens unsigned -> signed. J'ai ete distrait (il est bien defini pour le sens signed -> unsigned).
Correction donc:
Code :
|
Marsh Posté le 04-05-2011 à 20:26:31
La réponse de Un Programmeur m'a bien aidée,
j'ai tout de meme un autre probleme :
Code :
|
Pourquoi v + n (-2 + 10 ) ne me donne pas 8 ?
Marsh Posté le 04-05-2011 à 23:03:28
en fait si, ca me donne bien 8 ! au temps pour moi, je vous remercie en tout cas!
Bonne soirée
Marsh Posté le 03-05-2011 à 22:06:05
Bonsoir !
comment reconnait-on, le nombre 1111 1111 1111 1111 s'il est positif ou négatif?
car pour moi c'est égal à 65 535 mais c'est aussi -1 .... je sais pas comment dissocier...
J'écris un programme qui récupère des nombres, dans un fichier binaire, mais lorsque je récupère un nombre binaire comme celui au dessus, je ne sais pas si c'est -1 ou 65535 ..
Je sais d'autant plus qu'un nombre binaire négatif porte un bit de signe de valeur 1.. mais la quand j'affiche mon nombre binaire il m'affiche 65535 alors que c'est censé être -1..
Pouvez vous m'éclairer ?
Je vous remercie