Je ne suis pas tout à fait sûr de ce que vous faites, mais peut-être cela aidera:
#define countof(x) (sizeof(x)/sizeof(x[0]))
// an 8-bit number
int byte[8] = {0, 1, 1, 0, 1, 1, 1, 0}; // 1 = on, 0 = off
// flip all bits
for (size_t i = 0; i < countof(byte); ++i)
{
byte[i] = !byte[i];
}
// add one
for (size_t i = 0; i < countof(byte); ++i)
{
if (byte[i]) // if on
{
byte[i] = 0; // "add 1, reset to zero", and carry (no break)
}
else // if off
{
byte[i] = 1; // turn on
break; // nothing to carry, stop adding
}
}
(Je ne sais pas comment vous pousser dans la bonne direction sans expliquer simplement le code, désolé. Je pense que vous êtes. assez près cela est encore utile)
Vous voyez, quand vous en ajoutez un, si le bit en est déjà un, remettez-le à zéro et continuez le long des bits. Si le bit est zéro, placez-le à un, puis sortez de la boucle. (Rien à porter, donc nous avons fini d'ajouter.)
Espérons que ça aide. En passant, vous remarquerez que les bits sont stockés "en arrière" dans le code ci-dessus. Le LSB est à l'index 0.
Que contient array []? – WhirlWind
Pourquoi avez-vous besoin de convertir quelque chose à la représentation compliment 2s? Je crois que tout est déjà stocké de cette façon. – pajton
S'il vous plaît, clarifiez de quoi vous parlez. En ce moment, il est difficile de donner un sens à votre question. Qu'est-ce que tu "convertis en complément 2" et pourquoi? – AnT