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

  FORUM HardWare.fr
  Programmation
  C

  Nombre non signe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Nombre non signe

n°917319
Tonio94
Posté le 07-12-2004 à 19:10:05  profilanswer
 

Bonjour,
 
J'aimerais savoir ce qu'est un nombre non signe en base binaire ? En fait je suis entrain de recoder un bon morceau de la fonction printf et j'arrive a la gestion de %b qui affiche le nombre non signe en base binaire... Alors la je suis perdu  
:??:
 
Merci d'avance pour votre aide.


---------------
~ Msi z790 Gaming Plus Wifi | i9-12900K + Dark Rock Pro4 | 64Go G-Skill DDR4 4800 | RTX 3080 Ti
mood
Publicité
Posté le 07-12-2004 à 19:10:05  profilanswer
 

n°917321
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-12-2004 à 19:13:23  profilanswer
 

en binaire, un nombre non signé n'utilise pas son bit de poids le plus fort pour le signe, alors que pour un nombre signé, ce bit est obligatoirement à 1 et inutilisable


---------------
J'ai un string dans l'array (Paris Hilton)
n°917327
Taz
bisounours-codeur
Posté le 07-12-2004 à 19:19:58  profilanswer
 

tu peux pas deviner s'il ai signé ou pas, au mec de pas se planter dans l'argument

n°917331
HelloWorld
Salut tout le monde!
Posté le 07-12-2004 à 19:25:42  profilanswer
 

Citation :

alors que pour un nombre signé, ce bit est obligatoirement à 1 et inutilisable


:??:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°917353
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-12-2004 à 19:43:40  profilanswer
 

HelloWorld a écrit :

Citation :

alors que pour un nombre signé, ce bit est obligatoirement à 1 et inutilisable


:??:

je veux juste dire que le dernier bit d'un nombre signé ne peut pas servir à autre chose que pour le signe. Emporté dans mon élan, j'ai dit une connerie, il est pas forcément à 1. bit à 1 = négatif, bit à 0 = positif
 
un octet signé => 7 bits utilisables => de -128 à +127
un octet non signé => 8 bits utilisables => de 0 à 255


---------------
J'ai un string dans l'array (Paris Hilton)
n°917364
Tonio94
Posté le 07-12-2004 à 19:53:41  profilanswer
 

Mais il faut que je transforme un unsigned int en binaire pour gerer le %b alors non ?


---------------
~ Msi z790 Gaming Plus Wifi | i9-12900K + Dark Rock Pro4 | 64Go G-Skill DDR4 4800 | RTX 3080 Ti
n°917385
Taz
bisounours-codeur
Posté le 07-12-2004 à 20:07:02  profilanswer
 

Harkonnen a écrit :


un octet signé => 7 bits utilisables => de -128 à +127

houla, t'es de plus en plus balaise toi

n°917406
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-12-2004 à 20:19:33  profilanswer
 

Taz a écrit :

houla, t'es de plus en plus balaise toi


quoi ? [:heink]
-128 en binaire donne 10000000 (sur un octet, sinon le bit de signe est étendu sur les bits 9 à 31) et +127 donne 01111111 (idem), seuls les 7 bits de poids faibles sont utilisés, le dernier est utilisé pour le signe non ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°917407
Taz
bisounours-codeur
Posté le 07-12-2004 à 20:21:42  profilanswer
 

Harkonnen a écrit :

seuls les 7 bits de poids faibles sont utilisés, le dernier est utilisé pour le signe non ?

ah désolé, t'as dit 7 + 1, je croyais que t'avais dit 8 :)

n°917419
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-12-2004 à 20:35:56  profilanswer
 

Tonio94 a écrit :

J'aimerais savoir ce qu'est un nombre non signe en base binaire ? En fait je suis entrain de recoder un bon morceau de la fonction printf et j'arrive a la gestion de %b qui affiche le nombre non signe en base binaire... Alors la je suis perdu  


"%b", ça n'existe pas en C standard. C'est peut être une extension...
 
L'affichage en base 2 consiste à utiliser les chiffres 0 et 1 pour afficher une valeur numérique (non signée).
 
128 -> "10000000"
 
Comme la représentation interne d'une valeur numérique est du binaire, c'est assez simple en utilisant une boucle et des opérateurs 'bit'. (&, ~, >>, << etc.)
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 07-12-2004 à 20:35:56  profilanswer
 

n°917424
Lam's
Profil: bas.
Posté le 07-12-2004 à 20:40:51  profilanswer
 


chut, c'est comme pour le mur de Berlin, on lui a pas encore dit. Tu va lui faire une attaque cardiaque si tu continues.
 
Harko> Ne l'écoutes pas, c'est un jeune, il plaisante. Regarde, même Microsoft le dit. Le premier bit est le bit de signe: http://research.microsoft.com/~hol [...] float.html


Message édité par Lam's le 07-12-2004 à 20:41:36
n°917426
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-12-2004 à 20:41:32  profilanswer
 

Tonio94 a écrit :

Mais il faut que je transforme un unsigned int en binaire pour gerer le %b alors non ?


Tu ne peux pas le savoir, surtout que le passage de paramètre se fera dans un int si rien n'est précisé. C'est à l'opérateur d'utiliser un unsigned, ou de placer un cast dans l'appel du my_printf ().

Code :
  1. int a = 12345;
  2.    my_printf ("%b\n", (unsigned) a);


est-ce que tu prévois ça aussi :

Code :
  1. long b = 12345678;
  2.    my_printf ("%lb\n", (unsigned long) b);


Message édité par Emmanuel Delahaye le 07-12-2004 à 20:42:40

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°917431
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-12-2004 à 20:46:22  profilanswer
 


 

Lam's a écrit :

chut, c'est comme pour le mur de Berlin, on lui a pas encore dit. Tu va lui faire une attaque cardiaque si tu continues.


 
j'ai dit que j'avais dit une connerie emporté par mon élan, connerie que j'ai rectifié ensuite, messieurs, faut lire les posts suivants :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°917433
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-12-2004 à 20:47:23  profilanswer
 

Harkonnen a écrit :

j'ai dit que j'avais dit une connerie emporté par mon élan, connerie que j'ai rectifié ensuite, messieurs, faut lire les posts suivants :o


Tu peux aussi corriger ton post...
 
Ok, Je supprime le mien.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°917435
Lam's
Profil: bas.
Posté le 07-12-2004 à 20:48:37  profilanswer
 

T'as persisté avec une connerie plus grosse:
 

Harkonnen a écrit :

seuls les 7 bits de poids faibles sont utilisés, le dernier est utilisé pour le signe non ?


 
Non. Un nombre négatif s'obtient en faisant le complément à 2 de son opposé. Recette de cuisine toute bête : tu inverses tous les bits (un NOT en ASM), et tu ajoutes 1.
 
Donc:
0   -> NOT = 11111111  -> +1 = 00000000
1   -> NOT = 11111110  -> +1 = 11111111
127 -> NOT = 10000000  -> +1 = 10000001
 
et -128 = -127 -1 = 10000000
 
Donc, effectivement, tous les négatifs ont le bit de poids fort à 1, et c'est pour ça qu'on l'appelle parfois à tort "bit de signe", même si ce n'est pas juste ce bit qui décide du signe. Donc ce n'est pas un vrai bit de signe comme pour les flottants par exemple.
 

n°917441
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-12-2004 à 20:53:07  profilanswer
 

Lam's a écrit :


Non. Un nombre négatif s'obtient en faisant le complément à 2 de son opposé.  


Et pour compléter cet excellent article, ajoutons que ce mode de représentation des nombres négatifs (complément à 2), même si c'est le plus courant, n'est pas le seul supporté par le langage C. Sur certaines plateformes, ça peut aussi être 'complément à 1' ou 'sign-magnitude' (proche des flottants)


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°917452
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-12-2004 à 21:00:38  profilanswer
 

Lam's a écrit :


Non. Un nombre négatif s'obtient en faisant le complément à 2 de son opposé. Recette de cuisine toute bête : tu inverses tous les bits (un NOT en ASM), et tu ajoutes 1.


ah putain, je cours me cacher, le pire c'est que je l'ai su (y'a très très longtemps), mais à force, tu finis par céder à la facilité et considérer le dernier bit comme le bit de signe :sweat:
 
[:neowen]


---------------
J'ai un string dans l'array (Paris Hilton)
n°917458
Lam's
Profil: bas.
Posté le 07-12-2004 à 21:03:56  profilanswer
 

Harkonnen a écrit :

ah putain, je cours me cacher, le pire c'est que je l'ai su (y'a très très longtemps), mais à force, tu finis par céder à la facilité et considérer le dernier bit comme le bit de signe :sweat:
 
[:neowen]


Ouais enfin, t'avais pas complètement tort, comme l'as dit Emmanuel.  
 
Le standard C te garantis uniquement un intervalle [-127, 127] à tes signed char, pour que ça puisse tourner même la-dessus:
http://www.frobenius.com/7090.htm

n°917513
bjone
Insert booze to continue
Posté le 07-12-2004 à 22:26:47  profilanswer
 

sinon la technique du bulldozer est pas mal aussi.
 
tu parts de la droite à la recherche du premier 1, tu le gardes et tu inverse le reste:
 
100dec => (0..0 implicites) 01100100 bin
premier 1 en partant de la droite:
 
(0..0) 01100100
Tu gardes et t'inverse le reste:
(1..1) 10011100
 
sont forts ces russes :D


Message édité par bjone le 07-12-2004 à 22:27:36

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

  Nombre non signe

 

Sujets relatifs
Comment savoir si une varaibale est un nombre, une chaine ????[C++] representer un nombre 64 bits
[RSS] Nombre maximum d'items à afficherCompter le nombre de mots dans une CString.
Arbre, calcul du nombre de "coup" pour une recherche[SQL/ACCESS] Rechercher si un nombre est dans une table
compter le nombre de link clickerComment mettre les chiffres d'un nombre dans un tableau ?
Forcer l'affichage d'un nombre x.xx[C] Conversion nombre hexa en decimal
Plus de sujets relatifs à : Nombre non signe


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