C++ 如何翻转内存块中的任何位?

C++ 如何翻转内存块中的任何位?,c++,bit-manipulation,C++,Bit Manipulation,如何在一块内存中翻转所需的任何位: int size = 4000; void* block = malloc(size); bzero(block, size); // flip bit #100 in block 谢谢无效翻转位(无效*块,整数位) { 无符号字符*b=(无符号字符*)块; b[bit/8]^=1std::vector vb(4000*字符位);vb[317]=false;内存块中的位是如何编号的?可以假设位0、字节0中的位2^0、字节0中的位1是2^1等等……但是内存块的

如何在一块内存中翻转所需的任何位:

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

无效翻转位(无效*块,整数位)
{
无符号字符*b=(无符号字符*)块;

b[bit/8]^=1
std::vector vb(4000*字符位);vb[317]=false;
内存块中的位是如何编号的?可以假设位0、字节0中的位2^0、字节0中的位1是2^1等等……但是内存块的位被视为无符号整数数组,那么如何编号可能取决于处理器(或数据)的结束状态.人们倾向于假设字符位==8
…但从技术上讲,这只是一种假设(尽管后期型号POSIX确实需要它)。
void flip_bit (void *block, int bit)
{
    unsigned char *b = (unsigned char *) block;
    b[bit/8] ^= 1 << (bit % 8);
}