comment concaténer 2 entiers - C - Programmation
Marsh Posté le 21-02-2005 à 20:37:15
boom a écrit : Voilà, j ai deux entiers non signés de type double et j aimerais les mettre bout à bout, il doit surement y avoir une fonction qui fait cela, mais je ne la connais pas. |
Code :
|
si tu veux encore passé tout ça dans un double, cherche l'équivalent de char to int (atoi) en char to double...
Marsh Posté le 21-02-2005 à 21:00:03
boom a écrit : Voilà, j ai deux entiers non signés de type double et j aimerais les mettre bout à bout, il doit surement y avoir une fonction qui fait cela, mais je ne la connais pas. |
Pour des valeurs numériques, ça n'a pas de sens. Si il s'agit de chaines de caractères représentants des nombres, il faut préciser le format (décimal, héxa, nb de 0 en tête etc.). Je pense que tu as un problème de conception...
Marsh Posté le 21-02-2005 à 21:09:50
Emmanuel Delahaye a écrit : Pour des valeurs numériques, ça n'a pas de sens. Si il s'agit de chaines de caractères représentants des nombres, il faut préciser le format (décimal, héxa, nb de 0 en tête etc.). Je pense que tu as un problème de conception... |
Pourquoi ça na pas de sens ?
Bon, je ne suis pas un programmeur, mais là je dois modifier un truc déjà existant, j'avais essayé avec l'opérateur ##, mais ça ne marche pas.
Voici le bout de code :
Code :
|
Marsh Posté le 21-02-2005 à 21:13:57
# sprintf(nombre,"%d",a);
# sprintf(tmp,"%d",b);
# strcat(a,b);
mouaahahahh
Marsh Posté le 21-02-2005 à 21:58:30
Je pense que les opérateurs de multiplication et d'addition seront plus appropriés que l'utilisation du préprocesseur
Marsh Posté le 21-02-2005 à 21:59:47
Taz a écrit : # sprintf(nombre,"%d",a); |
jusqu a maintenant il n y a que lui qui ait répondu de manière constructive, bien que ce ne soit pas un code très beau.
Mais franchement, il existe pas une fonction qui lirait bit à bit ou octet à octet à une adresse pour la copier dans une zone mémoire, et répéter cette opération avec l autre variable.
Marsh Posté le 21-02-2005 à 22:00:32
boom a écrit : Voilà, j ai deux entiers non signés de type double et j aimerais les mettre bout à bout, il doit surement y avoir une fonction qui fait cela, mais je ne la connais pas. |
Je ne crois pas.
Marsh Posté le 21-02-2005 à 22:03:15
ReplyMarsh Posté le 21-02-2005 à 22:06:20
Mais c'est parce qu'il est magique que c'est un entier flottant
Pour information, double est le type du langage C qui permet de représenter les nombres réels.
Ton truc c'est juste un entier non signé de 16 bits.
Marsh Posté le 21-02-2005 à 22:09:14
moi23372 a écrit :
|
j'aurais voulu faire plus compliqué et plus bugueux, j'aurais pas reussi
Marsh Posté le 21-02-2005 à 22:10:40
chrisbk a écrit : j'aurais voulu faire plus compliqué et plus bugueux, j'aurais pas reussi |
T'as même buggé ton reply mon salaud
Marsh Posté le 21-02-2005 à 22:14:46
Hum, pour les mettres bout à bout, faudrait pas genre récupérer le nombre de digit du premier, puis faire deuxième * 10^(nbr digit) + premier ?
Marsh Posté le 21-02-2005 à 22:15:57
printf a écrit : Mais c'est parce qu'il est magique que c'est un entier flottant |
ok merci, mes notions en C sont plutot vagues.
Mais sinon pour ma question ça ne mavance pas des masses
Marsh Posté le 21-02-2005 à 22:18:48
[citation=989292,0,14,208403]Hum, pour les mettres bout à bout, faudrait pas genre récupérer le nombre de digit du premier, puis faire deuxième * 10^(nbr digit) + premier ?[/citation]
Ah ouais, pas con !
j y avais pas du tout pensé, merci bien.
Marsh Posté le 21-02-2005 à 22:20:24
[citation=989292,0,14,208403]Hum, pour les mettres bout à bout, faudrait pas genre récupérer le nombre de digit du premier, puis faire deuxième * 10^(nbr digit) + premier ?[/citation]
Ouais.
Ou sinon il peut comparer individuellement les champs de la structure
Marsh Posté le 21-02-2005 à 22:27:49
on peut utiliser les décalages aussi
genre uint32 = uint16_1 << 16 + uint16_2
non?
Marsh Posté le 21-02-2005 à 22:29:44
[citation=989309,0,19,208403]Ca risque pas de mettre des 0 entre les deux ?[/citation]
Uniquement ceux qui existaient déjà
Après c'est peut être pas ce qu'il veut, mais ça les met bout à bout
Marsh Posté le 21-02-2005 à 23:02:53
[citation=989307,0,18,144132]on peut utiliser les décalages aussi
genre uint32 = uint16_1 << 16 + uint16_2
non?[/citation]
Y'a rien qui te choque ?
(sans compter que les bases c'est comme les choux et les carottes, ça ne se mélange que dans une salade composée)
Marsh Posté le 21-02-2005 à 23:16:11
[citation=989326,0,22,95059]Y'a rien qui te choque ?
(sans compter que les bases c'est comme les choux et les carottes, ça ne se mélange que dans une salade composée)[/citation]
ben non, on décale notre int16 de 16 bits
Si tu décales de 15 bits tu va avoir un léger problème
(et je vois pas où on a un mélange de bases)
Marsh Posté le 21-02-2005 à 23:19:22
[citation=989332,0,25,9187]autrement dit y'a pu rien dedans[/citation]
Ah oui ptet ben qu'il faudrait commencer par le coller dans un int32
Marsh Posté le 21-02-2005 à 23:22:14
[citation=989337,0,27,9187]string [/citation]
nan sérieusement
(d'ailleurs ça eut plutôt été une caractère multioctets)
Marsh Posté le 21-02-2005 à 23:23:52
y se trouve que point ta question ne comprends
pour moins un uint_16 est codé sur 16bits
Marsh Posté le 21-02-2005 à 23:23:55
[citation=989307,0,18,144132]on peut utiliser les décalages aussi
genre uint32 = (uint16_1 << 16 )+ uint16_2
non?[/citation]
mais c'est tjrs faux
Marsh Posté le 21-02-2005 à 23:24:53
[citation=989345,0,31,44667][/citation]
deja ca aide rien niveau taille du biniou, pis quitte a bien faire on fait un '|' plutot qu'un '+', ca reflete mieux l'idée
Marsh Posté le 21-02-2005 à 23:25:13
dans l'expression "uint16_1 << 16"
quel est le type de l'opérande droite 16 ?
Marsh Posté le 21-02-2005 à 23:27:12
[citation=989347,0,33,72553]
quel est le type de l'opérande droite 16 ?[/citation]
tu veux mon poing dans la gueule?
Marsh Posté le 21-02-2005 à 23:32:19
d'ailleurs, Emmanuel me corrigera (je sors pas le bouquin), c'est même pas une histoire de type d'opérandes, je dirais que de toutes façons les opérandes de types char ou short sont convertis en int avant d'appliqué la promotion.
Marsh Posté le 21-02-2005 à 23:33:06
[citation=989347,20,13,72553]dans l'expression "uint16_1 << 16"
quel est le type de l'opérande droite 16 ?[/citation]
int.
Question subsidiaire : quelle est la taille d'un int sur l'architecture cible
Marsh Posté le 21-02-2005 à 23:38:25
De toutes façons c'est même pas la peine de se prendre le chou, puisque l'expression est mathématiquement fausse
Marsh Posté le 21-02-2005 à 23:41:53
[citation=989365,0,38,95059]De toutes façons c'est même pas la peine de se prendre le chou, puisque l'expression est mathématiquement fausse [/citation]
non
0<=a<2^16
0<=b<2^16
(a<<16)+b=a*2^16+b, c'est bien ce que mascouilles voulait faire non? (zetes cons on vous le faites exprès? )
Marsh Posté le 21-02-2005 à 20:33:52
Voilà, j ai deux entiers non signés de 16 bits et j aimerais les mettre bout à bout, il doit surement y avoir une fonction qui fait cela, mais je ne la connais pas.
Merci
edit : double
Message édité par boom le 21-02-2005 à 22:17:01