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

  FORUM HardWare.fr
  Programmation
  C

  calcul du nombre de bits

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

calcul du nombre de bits

n°1063007
aurelien_4​4
Posté le 27-04-2005 à 16:35:17  profilanswer
 

Bonjour,
j aimerais savoir comment on peut calculer le nombre
bits necessaire pour ecrire un entier n.
Je sais qu en C il y a sizeof mais comment peut
on faire lorsqu on travaille sur de grands entiers?

mood
Publicité
Posté le 27-04-2005 à 16:35:17  profilanswer
 

n°1063089
niemad
Posté le 27-04-2005 à 17:21:15  profilanswer
 

Je suis bien sure de ce que tu veux faire donc je reponds peut etre a cote de la plaque, mais quelque soit le type utiliser tu peux utiliser sizeof. Meme si tu as defini toi meme un type grand_entier tu peux faire un sizeof(grand_entier) et ca te retourneta la taille.
Par contre si ce que tu veux c est savoir le nombre de bit minimum qu il faut pour ecire un entier precis tu peux prendre le logarithme neperien de cet entier diviser par ln(2) et l arondie superieur du resultat te donne le nombre de bits.
Par exemple si tu definit une variable byte temp sur 8 bits avec temp=10 tu auras:
sizeof(temp)=8 bits
ln(temp)/ln(2)=3.3 donc 10 s ecrira avec 4 bits.

n°1063124
skelter
Posté le 27-04-2005 à 17:37:51  profilanswer
 

pour le nombres de digits binaires utilisés pour codé un type il faut utilisé sizeof (qui retourne une taille en char) et la constante CHAR_BIT (nombre de bits pour un char)
 
size_t bit_size_int = sizeof(int) * CHAR_BIT;

n°1063139
aurelien_4​4
Posté le 27-04-2005 à 17:47:18  profilanswer
 

Merci pour votre aide à tout les deux!

n°1063154
Taz
bisounours-codeur
Posté le 27-04-2005 à 17:56:04  profilanswer
 

ouf, j'ai failli faire une attaque.

n°1063172
Taz
bisounours-codeur
Posté le 27-04-2005 à 18:03:47  profilanswer
 

643 / 2136 est également une bonne approximation

n°1063252
niemad
Posté le 27-04-2005 à 19:09:08  profilanswer
 

ouais c est claire que sur mon sizeof j avais ete un peu leger :ange:

n°1064438
aurelien_4​4
Posté le 28-04-2005 à 15:52:16  profilanswer
 

tu aurais fait comment taz pour resoudre mon probleme?

n°1064446
Taz
bisounours-codeur
Posté le 28-04-2005 à 15:56:10  profilanswer
 

ben sizeof * CHAR_BIT
 
et j'aurais utilisé l'approximation 643 / 2136 plutot que le calcul flottant à coup de ln

n°1066906
aurelien_4​4
Posté le 30-04-2005 à 16:12:24  profilanswer
 

Excuse moi Taz mais je ne coomprend pas bien quand tu parles de l'approximation 643/2136 tu entends quoi par la?

mood
Publicité
Posté le 30-04-2005 à 16:12:24  profilanswer
 

n°1067176
Taz
bisounours-codeur
Posté le 30-04-2005 à 20:46:49  profilanswer
 

643/2136 est une approximation de log10(2) à 10^7. Donc ça te permet d'écrire des constantes entières sans problème
 
const size_t int_bits = sizeof(int) * CHAR_BIT;
const size_t int_digits10 = int_bits * 643 / 2136;
 
c'est quand même plus pratique que de sortir math.h et ln pour un truc simple comme cela.

n°1067304
Profil sup​primé
Posté le 30-04-2005 à 22:57:16  answer
 

Taz a écrit :

643/2136 est une approximation de log10(2) à 10^7. Donc ça te permet d'écrire des constantes entières sans problème
 
const size_t int_bits = sizeof(int) * CHAR_BIT;
const size_t int_digits10 = int_bits * 643 / 2136;
 
c'est quand même plus pratique que de sortir math.h et ln pour un truc simple comme cela.


 
Je pige pas ce que tu fais avec ton int_digits10 ensuite (ni ce qu'il représente mathématiquement d'ailleur).
 
Une autre solution possible (je ne sais pas laquelle est la plus efficace) :
 

Code :
  1. unsigned int tmp = n;
  2. int bits = 0;
  3. while (tmp) {
  4.     tmp >>= 1;
  5.     bits++;
  6. }
  7. printf("%d\n", bits);


 
Edit : attention ce bout de code ne fonctionne que pour des entiers positifs (à adapter donc pour les entiers négatifs).


Message édité par Profil supprimé le 30-04-2005 à 23:47:24
n°1067307
skelter
Posté le 30-04-2005 à 23:04:33  profilanswer
 

int_digits10 c'est le nombre de chiffres (en base 10) qu'un entier stocké dans un int peu avoir au maximun.
 
ca serais pas plutot
const size_t int_digits10 = int_digits * 643 / 2136;  
avec
const size_t int_digits = int_bits - 1;
:??:
mais si dans ce cas ca ne change rien

n°1067346
Profil sup​primé
Posté le 30-04-2005 à 23:37:26  answer
 

skelter a écrit :

int_digits10 c'est le nombre de chiffres (en base 10) qu'un entier stocké dans un int peu avoir au maximun.


 
Ah oui, bien sûr. Mais la question de départ m'avait plutôt l'air d'être : comment connaître le nombre de chiffres d'un entier en base 2 (nombre qui dépend de l'entier en question), et non pas : comment connaître le nombre de bits nécessaires en C pour coder un entier (qui est une constante qui dépend de la plateforme).
 
Avec la méthode de niemad (purement mathématique), on est bien obligé de calculer un logarithme du nombre, non ?
 
Sinon il reste la méthode que j'ai postée plus haut. :D


Message édité par Profil supprimé le 30-04-2005 à 23:38:36
n°1067486
skelter
Posté le 01-05-2005 à 09:39:33  profilanswer
 

et on pourrais faire la meme chose pour le nombre de chiffres en base 10, tmp /= 10

n°1067892
aurelien_4​4
Posté le 01-05-2005 à 19:42:18  profilanswer
 

Merci à tout le monde pour votre aide.
Bonne fin journee à vous tous!

n°1072493
aurelien_4​4
Posté le 04-05-2005 à 22:38:20  profilanswer
 

excusez moi de vous derangez mais ca veut dire quoi
>>=?

n°1072498
aurelien_4​4
Posté le 04-05-2005 à 22:40:11  profilanswer
 

alerim sans vouloir abuse de ta gentillesse tu pourrais m expliquer ton code stp? enfin la methode que tu utilises

n°1072508
Profil sup​primé
Posté le 04-05-2005 à 22:45:16  answer
 

aurelien_44 a écrit :

excusez moi de vous derangez mais ca veut dire quoi
>>=?


 

machin >>= n;


 
équivaut à :
 

machin = machin >> n;


 
Qui réalise un décalage vers la droite de n bits sur machin.
 
Lire le K&R (le livre de Kernighan et Ritchie) serait un bon début...

n°1072926
aurelien_4​4
Posté le 05-05-2005 à 15:36:53  profilanswer
 

ok merci


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

  calcul du nombre de bits

 

Sujets relatifs
Générer un nombre aléatoireCompter un nombre d'évènement à la suite en C
les grand nombre sous windowsCalcul du taux de cosangunité
Ajouter un certain nombre de composants lors du load de l'etatOutils de suivi de consommable : Calcul de la consommation????
Tester le nombre de retours d'une requête[Image-PHP] Comment recuperer nombre de couleur ?
Calcul des angles d'un avioncalcul formel ?!?
Plus de sujets relatifs à : calcul du nombre de bits


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