Для сдвига битов, как в первом примере, используйте оператор <<
. В языке C не существует обтекания для смен, часто называемого вращением . Вы должны выполнить операцию самостоятельно:
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.
Некоторые процессоры также имеют операцию поворота через перенос , которая будет вращать значение переноса в следующую смену. Это предполагает, что carry
будет глобальной переменной.
Для проверки битов на языке C вы будете использовать &
(двоичный оператор AND) и, возможно, оператор ~
(отрицание). Чтобы проверить самый старший бит в 8-битном байте:
if (byte & 0x80)
{
// bit is a 1
}
else
{
// bit is a 0
}
После всего сказанного вам необходимо выяснить, почему используется флаг carry (C_FLAG
), и разработать вокруг него другую систему. Как правило, бит переноса недопустим вне функции ассемблера, в которой он используется. Некоторые тесно связанные функции ассемблера могут нарушать это правило. В этом случае переписайте язык ассемблера, а не отлаживайте его. Редизайн всей программы!