2014-10-13 2 views
0

Как я могу перевернуть любой бит я хочу в куске памяти:Как перевернуть любой бит в блоке памяти?

int size = 4000; 
void* block = malloc(size); 
bzero(block, size); 
// flip bit #100 in block 

Благодаря

+0

'станд :: вектор VB (4000 * CHAR_BIT); vb [317] = false; ' – MSalters

+0

Как пронумерованы биты в вашем куске памяти? Можно предположить, что бит 0, равен 2^0 в байте 0, бит 1 равен 2^1 в байте 0 и т. Д. Но часть куска памяти обрабатывается, скажем, как массив целых чисел без знака, тогда как вы можете указать число бит, которое может зависеть от конечности процессора (или данных). Один из них предполагает, что 'CHAR_BIT == 8' ... но технически это просто предположение (хотя это требует поздняя модель POSIX. –

ответ

1
void flip_bit (void *block, int bit) 
{ 
    unsigned char *b = (unsigned char *) block; 
    b[bit/8] ^= 1 << (bit % 8); 
} 
Смежные вопросы