Я не совсем уверен, что вы делаете, но, возможно, это поможет:
#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
}
}
(Я не знаю, как подтолкнуть вас в правильном направлении, просто не объяснив код, извините. Я думаю, что вы достаточно близко, это все еще полезно.)
Видите ли, когда вы добавляете единицу, если бит уже равен единице, сбрасываете его на ноль и продолжаете вдоль битов. Если бит равен нулю, установите его в единицу, затем выйдите из цикла. (Нечего нести, поэтому мы добавили.)
Надеюсь, это поможет. Кстати, вы заметите, что биты хранятся «назад» в приведенном выше коде. LSB имеет индекс 0.