Se connecter / S'enregistrer
Votre question

Le language C et les nombres Entiers !

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
1 Février 2004 06:09:06

Salut,

Voilà j'ai besoin de grands nombres entiers dans un programme en C et j'aurais voulu savoir si il existait un type qui fasse plus de 64 bit !
Car pour les entiers y'a les long de 32bit, et aussi les __int64 de ... 64 bit mais j'aurais besoin de plus de bits donc si quelqu'un connait un autre type ...?

Merci ;-)

Autres pages sur : language nombres entiers

Anonyme
4 Février 2004 10:06:33

une solution de rechange, ca serait d'utiliser 2 long pour en faire un "super" long - après c'est juste une question de visualisation - si t'as un dépassement sur ton long de poids faible, tu incrémentes ton long de poids fort.

mais peut être existe-t-il un type sur 64 bits (je dirai que ça dépend du cpu et du compilateur)
4 Février 2004 10:10:12

dsl... ya pa plus long que 64 bits en C...

menfin sous linux ptet que si.. faut voir...
4 Février 2004 10:17:56

ya bien une histoire de compilateur qui détermine si tes int font 16 ou 32 bits ...

de toute facon, tu choisit pas !
4 Février 2004 11:01:21

Salut à tous,

Néanmoins un integer (entier) en C sera de la taille du mot machine (fonction du processeur utilisé)Le mot machine est l'unité de traitement de base de l'uc et est de nos jours souvent un multiple de 8 (D'ailleurs pour info c'est pour ca que la taille du mot machine est exprimé en octet = 8 bits).

Ps: Les fichiers d'en-tête limits.h et float.h contiennent des "define" précisant les tailles et les valeurs limites des entiers et des flottants.

@+

;-)
4 Février 2004 12:08:23

des entiers longs ...

l'autre soir j'essayais de calculer des factorielles en C, pour m'amuser, et je me suis heurté au problème, j'en ai parler à un pote qui connais bien le C, et qui m'a dis qu'il a un pote qui avais fait une classe pour gérer des entiers de 512Bits, je m'en suis pas occupé, mais faudrai voir ça avec lui...

par contre tu m'excuseras, mais je te donne pas son mail direct, je lui donne l'adsresse du post ...
4 Février 2004 13:40:00

Si tu n'as pas besoin de valeur signées, je te conseil de travailler en valeur absolue.
En déclarant, unsigned int :

Par ex : 1 entier signé allant de -32768 à 32767 , tu montes à 65535 en non signé. (ex sur compil 16 bits).

Je pense que tu souhaites utilisez des entiers pour une question de rapidité de calcul et pour pouvoir utiliser toutes les fonctions mathématiques du C.
Tout dépend l'application que tu veux en faire ...

sinon utilises le unsigned long et tu montras jusqu'à 4294967295 (tjs en 16 bits).

Rien ne t'empeche selon le type de résultat attendu de bosser en long int et d'utiliser un operateur de cast, pour forcer la mise en forme en passage de paramétre d'une fonction, mais attention ca depend vraiment de ce que tu veux faire , (risques de pertes de valeurs significatives ...)

Enfin bon courage ;-)
4 Février 2004 18:49:05

Merci pour tous ces conseil mais là je bosse déjà avec le type __int64 (un entier de 64 bits) donc en signé ça va jusqu'aux milliards de milliards mais j'avais besoin de plus parce que j'avais besoin de multiplier ces nombres entre eux et même le unsigned __int64 ne suffisait pas.

M'enfin ce qui m'embête c'est que pour utilisiser des entiers supérieurs à 64bits, ben je suis obligé de prendre en compte le dépassement dans un long, un int ou bien même un __int64 et pour faire les calculs après ben faut que je redéfinisse toutes les opérations !

En fait je fais un programme de cryptologie (codage/décodage/forçage) et j'ai besoin de faire des multiplications qui dépassent les 64 bits mais comme c'est des multiplications modulo un entier (__int64) ben j'ai réussi en décomposant mes nombres à ne pas dépasser ...
4 Février 2004 19:05:00

Citation :

Insomniak a écrit :
Merci pour tous ces conseil mais là je bosse déjà avec le type __int64 (un entier de 64 bits) donc en signé ça va jusqu'aux milliards de milliards mais j'avais besoin de plus parce que j'avais besoin de multiplier ces nombres entre eux et même le unsigned __int64 ne suffisait pas.

M'enfin ce qui m'embête c'est que pour utilisiser des entiers supérieurs à 64bits, ben je suis obligé de prendre en compte le dépassement dans un long, un int ou bien même un __int64 et pour faire les calculs après ben faut que je redéfinisse toutes les opérations !

En fait je fais un programme de cryptologie (codage/décodage/forçage) et j'ai besoin de faire des multiplications qui dépassent les 64 bits mais comme c'est des multiplications modulo un entier (__int64) ben j'ai réussi en décomposant mes nombres à ne pas dépasser ...


t'implémentes un algorithme particulier?
5 Février 2004 11:41:07

c le problème du sac à dos ... appliqué à la crypto ;-)

Mais bon ma soutenance dessus c cet aprem donc j'ai plus trop le tps de modifier la ! :-D
15 Septembre 2004 09:52:43

salut est-ce que tu pourrais me passer ton tp sur le sac a dos svp,
ou est-ce que tu pourrais m'aider dessu?
merci d'avance
8 Septembre 2005 11:26:17

J'arrive un peu tard sur ce forum, mais je pense avoir une info.
Pour ce type de calculs, il faut s'orienter vers des librairies de calcul sur les garnds entiers.
Il faut rechercher du coté Xint.
a b L Programmation
8 Septembre 2005 13:18:08

même les entier 64 bits ne font pas partie de la norme C, alors plus...
En C++ c'est qimple, il suffit de faire une classe et redéfinir les opérateurs de base +, -, * ... pour ces objets.
En C il faut fiare une structre, mais si c'est pour faire une structure, utilisez plutôt des entiers 32 bits (long) pour être compatible avec tout compilateur C.

typedef struct {
unsigned long num1;
unsigned long num2;
unsigned long num3;
unsigned long num4;
} BigInt;

et puis faire des macros pour les opérations de bases.
8 Septembre 2005 14:17:23

titi_mimi, vas sur prologin.org, tu pourras trouver de l' aide sans doute.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS