J'ai plusieurs question de débutant et donc pour être clair je vais éparpiller le temps de parole.
En prime j'ai toujours pas pris le plis de designer les bonnes terminologie aux .. aux heu trucs !
Il y a pas d'application réel je m'écrit quelque chose juste pour m’améliorer ...
Je tente une bidouille sur des variables et je compte bien (oui je compte) utiliser
un unsigned long pour stocker 9 chiffres que je découpe ensuite en unité de 0 à 9,
le tout dans une fonction.
J'utilise un unsigned long plutôt que des bytes puisque je reste sur des chiffres de 0 à 9
et que le "byte" prend 1octet, le "int" 2octet, "unsigned long" 4octet.
9 petits chiffres sur 9 octets, bof ! par contre 9 chiffre sur 4 octet...
Bref, pour une question de place mémoire je gagne bien 50% si je prend en compte le code qui va servir à convertir.
J'ai écrit ceci est-ce que la théorie fonctionne ?
Ou mieux, existe-il mieux ?
Les variables global: unsigned long usage_t[]={} et int ident
int traite_id()
{
// variable unsigned long usage_t[]={164233958,220000000,... etc } :
// int 2 octet, donc seulement (111 à 999)
// char 1 octet (1 à 9)
// unsigned long 4 octet (111 111 111 à 999 999 999) <- gain de place
// ident = 1 à 255, dans l'exemple ident = 4
int tt=0,id,t,result=0; unsigned char nomb[10],chiff[2];
t=sizeof(usage_t); // taille total du tableau pour connaitre la fin !
id=ident; // j'en touche une sans faire bouger l'autre
while(id<9){tt++;id-=9;}; //si id supérieur à 9, donc ajoute 1 à tt et -9 à id
if (tt<=t-1)
{
nomb=char(usage_t[tt]); // ex: d'un nombre a 9 chiffre vers une chaine de 9 caract. 164237958='164237958'
chiff=nomb.charAt(id); // ex: d'une chaine '164237958' je sors le 4ieme partant de gauche = '2'
result=int(chiff); // ex: de '2' j'obtient type 2
};
// par defaut result=0
return (result);
}
J'ai beaucoup de mal à comprendre ton code, mais tu as l'air de te compliquer la vie pour pas grand chose ^^ en plus tu confonds pas mal de choses : un tableau de char c'est un tableau de byte, donc la tu gagnes rien ... Pour un chiffre de 0 à 10 il te faudra 5 bits (en décimal = de 0 à 15) donc un long de 4 octet pourra contenir 8 x 4 /5 = 6 nombre compris entre 0 et 10. 6 nombre contenu dans 4 byte de mémoire par rapport à 4 bytes contenu donc dans 4 bytes, le gain est très limité ... Surtout que toutes tes fonctions et tes variables vont bouffer plus de RAM que tu ne vas en gagner
A pardon !
Note : la variable d'origine sera un mémoire programme
...
J'ai beaucoup de mal à comprendre ton code (oui je remarque), mais tu as l'air de te compliquer la vie pour pas grand chose ^^
en plus tu confonds pas mal de choses : un tableau de char (non, de unsigned long) c'est un tableau de byte, donc la tu gagnes rien (conversion )
... Pour un chiffre de 0 à 10 (non, de 1 à 9 inclus aucune dizaine) il te faudra 5 bits (non, 4bits comme un affichage BCD)(en décimal = de 0 à 15)
donc un long de 4 octet pourra contenir 8 x 4 /5 = 6 nombre (non 9, unsigned long 4milliard et des poussières j'utilise les poussières) compris entre 0 et 10 (non non toujours 1 à 9).
6 nombre (non toujours 9 pour 999 999 999) contenu dans 4 byte de mémoire par rapport à 4 bytes contenu donc dans 4 bytes (...heuf ), le gain est très limité ...
(non enfin heu non ! car il va contenir 256 résultat 256/9=28 variable pour un total de 112 octet, pour 28x4)
Surtout que toutes tes fonctions et tes variables vont bouffer plus de RAM que tu ne vas en gagner (Temporairement dans la fonction)
...
Heu voilà donc 256x1 (byte) = 256 ok mais, 256-112=144 octet de gagner(!), est-que le code de la fonction prend 144 octets ? bonne question. Voilà une réponse qui m’intéresse .
Si j'ai bien compris tu cherches à découper un long en plusieurs sous-variables de 4 bits (0 ~ 15) ?
À mon avis ce que tu cherches à faire c'est une "union".
Ha voilà qui change de mon machin mal taper. Enervant de simplicité, d’ailleurs j'en pleurerai presque.
J'ai du mal à voir comment fonctionne le modulo, j'ai essayer mais lààà alors lààà modulo 10 !
Modulo 10 l'unique usage, le seul qui va me servir, et pourtant au delà de ça le MODULO me passe au dessus comme la physique quantique.
Ma calculette de windows me prouve bien que modulo 10 va systématiquement me sortir l'unité, oui.
Hhaa moi et les maths.
Et pour la seconde solution je m'en sors encore moins bien ... mais bon.