Bonjour, je vous annonce le combat entre deux fervents défenseurs du BCD:
((dec/10)<<4)+(dec%10); contre dec>9?dec+6:dec;
Programme de test, première valeur affichée en décimale, deuxième en hexa (ça affiche pour ceusses qui sont incrédules)
le print dans la fonction, c'est pour être sûr qu'il y ait bien la fonction (je pense que le compilateur a une fâcheuse tendance à virer mon code si il ne fait rien)
byte bcd(byte dec)
{
Serial.print(dec); Serial.print(" -> ");
// return ((dec/10)<<4)+(dec%10);
// if (dec>9) return dec+6; else return dec;
// return dec > 9 ? dec + 6 : dec;
}
void setup()
{
Serial.begin(115200);
for (byte n = 0; n < 16; n++) Serial.println(bcd(n), HEX);
}
void loop()
{
}
1746 octets. C'est ma base!
byte bcd(byte dec)
{
Serial.print(dec); Serial.print(" -> ");
return ((dec/10)<<4)+(dec%10);
// if (dec>9) return dec+6; else return dec;
// return dec > 9 ? dec + 6 : dec;
}
void setup()
{
Serial.begin(115200);
for (byte n = 0; n < 16; n++) Serial.println(bcd(n), HEX);
}
void loop()
{
}
1782 octets
byte bcd(byte dec)
{
Serial.print(dec); Serial.print(" -> ");
// return ((dec/10)<<4)+(dec%10);
if (dec>9) return dec+6; else return dec;
// return dec > 9 ? dec + 6 : dec;
}
void setup()
{
Serial.begin(115200);
for (byte n = 0; n < 16; n++) Serial.println(bcd(n), HEX);
}
void loop()
{
}
1754 octets
byte bcd(byte dec)
{
Serial.print(dec); Serial.print(" -> ");
// return ((dec/10)<<4)+(dec%10);
// if (dec>9) return dec+6; else return dec;
return dec > 9 ? dec + 6 : dec;
}
void setup()
{
Serial.begin(115200);
for (byte n = 0; n < 16; n++) Serial.println(bcd(n), HEX);
}
void loop()
{
}
1754 octets
En résumé:
pour 8 octets vous avez les formules compètes (sans jus d'orange):
if (dec>9) return dec+6; else return dec;
return dec > 9 ? dec + 6 : dec;
la deuxième, c'est pour les fatigués du clavier. C'est moins lisible si on n'a pas l'habitude.
La première est pas mal.
pour 68 octets vous n'avez qu'un plat:
return ((dec/10)<<4)+(dec%10);
Pour ceux qui n'ont pas suivi, prenez
byte bcd(byte dec)
{
if (dec>9) return dec+6;
else return dec;
}
C'était ce qui était utilisé quand on faisait des décodeurs BCD avec des portes ET OU NON... Ça fonctionne encore