Pour le décalage des bits, comme dans votre premier exemple, utilisez la fonction <<
opérateur. Dans le langage C, il n'y a pas de enveloppant pour les équipes, souvent qualifiées de tourne . Vous devrez mettre en œuvre l'opération vous-même :
unsigned char carry;
carry = byte & 0x80; // Save the Most Significant bit for 8-bit byte.
byte <<= 1; // Left shift by one, insert a 0 as the least significant bit.
byte |= carry; // Put the rotated bit back into the byte.
Certains processeurs disposent également d'un rotation à travers le portage qui fera tourner la valeur de report dans le décalage suivant. Cela suppose que le carry
être une variable globale.
Pour tester les bits en langage C, vous utiliserez la fonction &
(opérateur ET binaire) et peut-être le ~
opérateur (négation). Pour tester le bit le plus significatif dans un octet de 8 bits :
if (byte & 0x80)
{
// bit is a 1
}
else
{
// bit is a 0
}
Avec tout cela dit, vous devrez découvrir pourquoi le transporter drapeau ( C_FLAG
) est utilisé et concevoir un système différent autour de lui. En général, le bit de report est invalide en dehors de la fonction du langage d'assemblage dans laquelle il est utilisé. Certaines fonctions en langage d'assemblage étroitement couplées peuvent violer cette règle. Dans ce cas, réécrivez le langage d'assemblage plutôt que de le déboguer. Redessinez tout le programme !