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

  FORUM HardWare.fr
  Programmation
  C

  nombre de bits d'un nombre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

nombre de bits d'un nombre

n°1551431
mormegil92
Posté le 30-04-2007 à 13:36:11  profilanswer
 

comment faire pour obtenir le nombre de bit d'un entier a en C

mood
Publicité
Posté le 30-04-2007 à 13:36:11  profilanswer
 

n°1551433
masklinn
í dag viðrar vel til loftárása
Posté le 30-04-2007 à 13:38:53  profilanswer
 

what?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1551434
mormegil92
Posté le 30-04-2007 à 13:40:39  profilanswer
 

par exemple 32 en base 10 s'écrit 10000 en base 2, ce qu ej evoudrais faire c'est entré a=14689753 en base 10 et que la fonction me donne le nombre de chiffre en base 2 de cet entier a

n°1551439
olivthill
Posté le 30-04-2007 à 13:53:01  profilanswer
 

En comparant par rapport à la puissance de 2 la plus proche.

n°1551440
Trap D
Posté le 30-04-2007 à 13:53:06  profilanswer
 

CHAR_BIT * sizeof int
oups, c'est la réponse au premier post


Message édité par Trap D le 30-04-2007 à 13:54:41
n°1551442
masklinn
í dag viðrar vel til loftárása
Posté le 30-04-2007 à 13:54:52  profilanswer
 

[:petrus75]
 
Oui et donc?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1551445
Trap D
Posté le 30-04-2007 à 14:00:03  profilanswer
 

Il n'y a pas cette formule qui donne le nombre de chiffres d'une nombre m dans une base n : ln(m)/ln(n)+1 ?

n°1551461
masklinn
í dag viðrar vel til loftárása
Posté le 30-04-2007 à 14:11:07  profilanswer
 

Trap D a écrit :

Il n'y a pas cette formule qui donne le nombre de chiffres d'une nombre m dans une base n : ln(m)/ln(n)+1 ?


J'aurais du quoter, je répondais à son second post en fait, pas au tiens :o

 

désolé :o


Message édité par masklinn le 30-04-2007 à 14:11:38

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1551713
Taz
bisounours-codeur
Posté le 01-05-2007 à 01:26:26  profilanswer
 

si tu peux éviter de sortir 2 ln, et que tu fais le truc simple avec des >> & c'est mieux non ? voire sans boucle ou carrément si ton processeur a ça avec un cntlwz

n°1551714
red factio​n
Posté le 01-05-2007 à 03:14:45  profilanswer
 

Code :
  1. while(c){
  2.   nb_bits+=c&1;
  3.   c = c>>1;
  4. }


 
jai fais ca comme ca c a verifier

mood
Publicité
Posté le 01-05-2007 à 03:14:45  profilanswer
 

n°1551724
matafan
Posté le 01-05-2007 à 08:43:04  profilanswer
 

Là tu comptes le nombre de bits à 1 dans c, pas le nombre de chiffres dans la représentation binaire.

n°1551807
tbp
Posté le 01-05-2007 à 13:15:48  profilanswer
 

Sans les mains, celà donne...

Code :
  1. int foo(int val) {
  2. union { float f; int i; } bar = { (float)val };
  3. int exp = (bar.i >> 23) & 0xff;
  4. return exp >= 127 ? exp-127+1 : 0;
  5. }


n°1551862
Taz
bisounours-codeur
Posté le 01-05-2007 à 17:48:10  profilanswer
 
n°1551881
marctes
Posté le 01-05-2007 à 18:48:25  profilanswer
 

mormegil92 a écrit :

par exemple 32 en base 10 s'écrit 10000 en base 2, ce qu ej evoudrais faire c'est entré a=14689753 en base 10 et que la fonction me donne le nombre de chiffre en base 2 de cet entier a


 
ltoa() , c'est pas fait pour les chiens...

n°1551882
masklinn
í dag viðrar vel til loftárása
Posté le 01-05-2007 à 18:49:48  profilanswer
 

marctes a écrit :

ltoa() , c'est pas fait pour les chiens...


itoa c'est pas standard.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1551916
tbp
Posté le 01-05-2007 à 19:40:23  profilanswer
 


log2 par extraction - non portable - de l'exposant - du flottant correspondant - qui se trouve être "le nombre de chiffre en base 2 de cet entier", bit de signe non compris.


Message édité par tbp le 01-05-2007 à 19:41:16
n°1551989
Taz
bisounours-codeur
Posté le 02-05-2007 à 00:31:02  profilanswer
 

ça j'avais cru comprendre, mais je ne vois aucun intérêt à cette méthode ...

n°1551999
tbp
Posté le 02-05-2007 à 03:17:50  profilanswer
 

C'est pourtant évident: O(1) , pas de table, pas de boucle, un minimum d'operations (load/store/shift/add) et nul besoin de se battre avec l'asm inline (ou les builtins spécifiques à chaque compilo) pour taquiner le bsr ou équivalent. Le tout est vectorisable.
 
Note: il y a d'autre façon de détourner les flottants pour le même résultat.  

n°1552000
0x90
Posté le 02-05-2007 à 04:19:20  profilanswer
 

La taille d'un entier étant fixe y'a pas franchement de raison de parler de complexité :o


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1552021
tbp
Posté le 02-05-2007 à 08:15:48  profilanswer
 

0x90 a écrit :

La taille d'un entier étant fixe y'a pas franchement de raison de parler de complexité :o


Voilà voilà. Je saisis mal ce fétichisme pour les boucles, qui n'est justifiable ni par la vitesse d'exécution ni la concision mais si c'est votre truc qui suis-je pour juger. Surtout, on a vu chose plus intéressante à débattre.

n°1552077
masklinn
í dag viðrar vel til loftárása
Posté le 02-05-2007 à 10:26:16  profilanswer
 

0x90 a écrit :

La taille d'un entier étant fixe y'a pas franchement de raison de parler de complexité :o


Ca, c'est vrai que dans les langages pour pervers psychopathes genre le C :o


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1552243
0x90
Posté le 02-05-2007 à 12:43:34  profilanswer
 

masklinn a écrit :

Ca, c'est vrai que dans les langages pour pervers psychopathes genre le C :o


 
Ça tombe bien c'est un topic C :)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1552285
MagicBuzz
Posté le 02-05-2007 à 13:48:26  profilanswer
 

matafan a écrit :

Là tu comptes le nombre de bits à 1 dans c, pas le nombre de chiffres dans la représentation binaire.


non pas du tout, il répond exactement à la question posée : il compte le nombre de bits significatifs.
 
attention toutefois, pour un nombre négatif, la valeur sera toujours de sizeof(var) * 8 (il faudra penser à faire un Abs() avant)
 
sinon, je suppose que le but du jeu ici, c'est, à partir d'un nombre de taille inconnue (par exemple, une saisie utilisateur) stocké dans une variable de grande taille, de détecter le plus petit type possible pour le stocker non ?
 
en C, je ne sais pas s'il y a des constantes "MIN" et "MAX" pour un type donné.
 
Mettons ici le code C#, à traduire selon les besoins (quitte à mettre les constantes en dur, de toute façon elles sont normalement figées) :
 

Code :
  1. Int64 nbr = 1234567890; // Nombre saisi par l'utilisateur
  2.  
  3. if (Math.Abs(nbr) > (Int64)Int32.MaxValue)
  4. {
  5.    Console.WriteLine("On peut représenter ce nombre en 64 bits" );
  6. }
  7. else if (Math.Abs(nbr) > (Int64)Int16.MaxValue)
  8. {
  9.    Console.WriteLine("On peut représenter ce nombre en 32 bits" );
  10. }
  11. else if (Math.Abs(nbr) > (Int64)byte.MaxValue)
  12. {
  13.    Console.WriteLine("On peut représenter ce nombre en 16 bits" );
  14. }
  15. else
  16. {
  17.    Console.WriteLine("On peut représenter ce nombre en 8 bits" );
  18. }

Message cité 1 fois
Message édité par MagicBuzz le 02-05-2007 à 13:56:26
n°1552535
matafan
Posté le 02-05-2007 à 17:59:45  profilanswer
 

MagicBuzz a écrit :

non pas du tout, il répond exactement à la question posée : il compte le nombre de bits significatifs.


Ben non, il ajoute c&1 au lieu de 1. Donc il compte le nombre de bits à 1.

n°1552570
MagicBuzz
Posté le 02-05-2007 à 20:03:57  profilanswer
 

Ah oui effectivement.
Je suis pas habitué aux notations C à la con :spamafote: Il faut faire ++ et non coller le résultat d'un masque :jap:

n°1552572
0x90
Posté le 02-05-2007 à 20:05:56  profilanswer
 

Parcequ'en C# y'a pas de & ptêtre ?


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1552586
MagicBuzz
Posté le 02-05-2007 à 20:26:46  profilanswer
 

0x90 a écrit :

Parcequ'en C# y'a pas de & ptêtre ?


c'est pas parceque C# a hérité d'une tétrachiée de conneries issues du C que je les utilise :p

n°1555401
Sve@r
Posté le 04-05-2007 à 15:09:45  profilanswer
 

MagicBuzz a écrit :

c'est pas parceque C# a hérité d'une tétrachiée de conneries issues du C que je les utilise :p


 
Ouaip t'as raison. Il y a des dizaines de programmeurs qui se sont cassés le cul à introduire des outils en C comme la manipulation d'adresses, de bits ou autres hyper sympas (évidemment faut avoir un peu de jugeotte quand on les utilise) et voilà comment on les traite. Retourne au COBOL... :sol:


Message édité par Sve@r le 04-05-2007 à 15:10:16

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1555427
slvn
Posté le 04-05-2007 à 15:33:31  profilanswer
 

ca aussi ca marche...c'est même plus rapide.
 

Code :
  1. int nb_bit( int i){
  2. int nb = 0;
  3. while( i ){
  4.  i &=  i - 1;
  5.  nb++;
  6. }
  7. return nb;
  8. }

n°1555593
Sve@r
Posté le 04-05-2007 à 23:38:19  profilanswer
 

slvn a écrit :

ca aussi ca marche...c'est même plus rapide.
 

Code :
  1. int nb_bit( int i){
  2. int nb = 0;
  3. while( i ){
  4.  i &=  i - 1;
  5.  nb++;
  6. }
  7. return nb;
  8. }



Je n'arrive pas à trouver le principe mathématique qui a donné cet algo. Par ailleurs, je pense qu'il ne correspond pas à la question initiale
En effet, si on le déroule "à la main" sur le nombre 10 (1010 en binaire), alors on obtient ceci
- itération 1: i=i & (i - 1) => i= 1010 & 1001 = 1000 et nb passe à 1
- itération 2: i=i & (i - 1) => i= 1000 & 0111 = 0000 et nb passe à 2
i vaut 0 => fin de boucle => nb final vaut 2
 
Apparemment, cet algo te donne le nombre de bits à 1 d'un nombre (j'ai testé avec 11 et avec 6) mais le sujet initial était "avoir le nombre de bits total". Ceci dit, il est quand-même joli...


Message édité par Sve@r le 05-05-2007 à 09:25:15

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1555598
Trap D
Posté le 04-05-2007 à 23:54:08  profilanswer
 

Allez, je participe aussi

Code :
  1. int nbbit(int x)
  2. {
  3. int nb = 0;
  4. while(x > 0)
  5. {
  6.  nb++;
  7.  x >>= 1;
  8. }
  9. return nb;
  10. }

Ne marche pas pour x = 0 .


Message édité par Trap D le 04-05-2007 à 23:58:45
mood
Publicité
Posté le   profilanswer
 


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

  nombre de bits d'un nombre

 

Sujets relatifs
Améliorer la vitesse du fonction donnant un nombre aléatoirecomment augmenter le nombre de jointure sur mysql??
nombre max d'image par ligneProcesseur 32 bits - Qesako
[VBSCRIPT] nombre ?Creation de fichier binaire->choix du nombre de bits
calcul du nombre de bitsun nombre de 1024 bits fait combien de chiffres ?
[C++] representer un nombre 64 bits[RESOLU]Convertir un entier en HEXA sur un nombre de bits
Plus de sujets relatifs à : nombre de bits d'un nombre


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