[C] Aide concatener entiers et char dans tabl
Fermé
archim4ge
-
16 mars 2009 à 19:48
mamiemando Messages postés 33387 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 novembre 2024 - 16 mars 2009 à 20:57
mamiemando Messages postés 33387 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 novembre 2024 - 16 mars 2009 à 20:57
A voir également:
- [C] Aide concatener entiers et char dans tabl
- Concatener deux cellules excel - Guide
- Coco char - Accueil - Réseaux sociaux
- Concaténer pdf - Guide
- Comment insérer une table des matières dans word - Guide
- Inverse de concatener ✓ - Forum Excel
4 réponses
mamiemando
Messages postés
33387
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 novembre 2024
7 803
16 mars 2009 à 20:57
16 mars 2009 à 20:57
Les deux marche mais celui de wardog requiert de compiler avec <math.h> (option -lm à la compilation) et est beaucoup plus coûteux d'un point de vue calcul, mais présente l'avantage d'être plus naturelle.Si c'est juste un tout petit programme on s'en fout.
Mais si cette fonction doit être appelée souvent la méthode qui consiste à manipuler des champs de bits (sans mauvais jeu de mot) est beaucoup plus efficace.
Bonne chance
Mais si cette fonction doit être appelée souvent la méthode qui consiste à manipuler des champs de bits (sans mauvais jeu de mot) est beaucoup plus efficace.
Bonne chance
Wardog
Messages postés
389
Date d'inscription
mercredi 5 octobre 2005
Statut
Membre
Dernière intervention
17 octobre 2009
159
16 mars 2009 à 20:19
16 mars 2009 à 20:19
Bonsoir,
Bon j'ai pas tout pigé mais je vais tenter de t'aider.
En gros tu as des int de D0 à D7 à 0 ou 1.
Tu veux récupérer la valeur et la mettre dans ton tableau.
Voici un exemple avec 00101010:
Bon j'ai pas tout pigé mais je vais tenter de t'aider.
En gros tu as des int de D0 à D7 à 0 ou 1.
Tu veux récupérer la valeur et la mettre dans ton tableau.
Voici un exemple avec 00101010:
#include <stdlib.h> #include <stdio.h> #include <math.h> int main() { unsigned char tab_test[3]; tab_test[0] = 0; tab_test[1] = 0; //(bin)00101010 = (dec)42 dans tab_test[0] int d0 = 0; int d1 = 0; int d2 = 1; int d3 = 0; int d4 = 1; int d5 = 0; int d6 = 1; int d7 = 0; //conversion binaire à decimale tab_test[0] = pow(2,7) * d0 + pow(2,6) * d1 + pow(2,5) * d2 + pow(2,4) * d3 + pow(2,3) * d4 + pow(2,2) * d5 + pow(2,1) * d6 + pow(2,0) * d7; //on affiche printf("%d", tab_test[0]); return (0); }
mamiemando
Messages postés
33387
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 novembre 2024
7 803
16 mars 2009 à 20:43
16 mars 2009 à 20:43
Ce n'est pas du tout la bonne méthode. Supposons que d0 à d7 soit des entiers (ou des booléens) allant de 0 à 1. Ce qui nous intéresse c'est le bit de poids faible. Un entier étant codé sur 32 bits voici comment garantir qu'on a juste éventuellement le bit de poids faible à 1 tu peux éventuellement appliquer un masque & avec 1.
Ici le morceau de code qui t'intéresse c'est d[i] << i qui consiste à décaler la valeur de d[i] de i bits vers la gauche (en particulier le bit de poids faible, qui est de toute façon le seul qui nous intéresse). On fait le ou logique (opérateur |) de tous ces bits pour reconstituer res. Je ne sais pas si tu es familier des masques mais "x |= y" signifie "x = x | y" et "x &= y" signifie "x = x & y".
Bonne chance
#include <stdio.h> #define N 8 int main(){ int d[N]; unsigned i; int res = 0; d[0] = 1; // poids faible d[1] = 0; d[2] = 1; d[3] = 0; d[4] = 0; d[5] = 1; d[6] = 0; d[7] = 0; d[8] = 1; // poids fort // garantir que seul le but de poids faible vaut 1 = 0x0001 // (ici c'est superflu car les d[i] valent 0 ou 1) for(i=0;i<N;++i) d[i] &= 1; // afficher d (en partant du bit de poids fort) for(i=0;i<N;++i) printf("%d",d[N-i-1]); printf("\n"); // construire le résultat (c'est le passage qui t'intéresse) for(i=0;i<N;++i) res |= d[i] << i; printf("res = %x\n",res); return 0; }
Ici le morceau de code qui t'intéresse c'est d[i] << i qui consiste à décaler la valeur de d[i] de i bits vers la gauche (en particulier le bit de poids faible, qui est de toute façon le seul qui nous intéresse). On fait le ou logique (opérateur |) de tous ces bits pour reconstituer res. Je ne sais pas si tu es familier des masques mais "x |= y" signifie "x = x | y" et "x &= y" signifie "x = x & y".
Bonne chance