有没有标准的C函数用于bitwapping?

liv*_*hak 1 c linux bit-manipulation

可能重复:C
中位反转的最佳算法(从MSB-> LSB到LSB-> MSB)

我有一个64位字,我想对它进行以下操作.

首先,我想做一个比特交换(交换比特63与比特0交换比特62与比特1,依此类推)

完成上述操作后,我想在字节0和字节7字节1和字节6之间进行字节交换交换,依此类推.

现在我们在gcc linux中有一个内置函数来做第二部分bswap_64().有没有任何函数可以做第一部分在gcc linux C中可用

Kei*_*son 6

净效果与每个字节的位交换相同.例如,首先将字节0复制到字节7,使其位反转,然后将其复制回byte0而不进行位反转.

对这些操作中没有任何内置支持,但是每个字节的位交换应该相当简单.最有效的方法可能是256个元素的查找表.

uint64_t the_word = /* whatever */
unsigned char *bytes = &the_word;
for (i = 0; i < 7; i ++) {
     bytes[i] = reverse[bytes[i]];
}
Run Code Online (Sandbox Code Playgroud)

哪里:

const unsigned char reverse[UCHAR_MAX+1] {
    0x00, 0x80, ..., 0xFF
}
Run Code Online (Sandbox Code Playgroud)

您可以编写一个小程序来计算每个字节值的位交换值,并生成初始化的源代码bytes.(或者,既然你正在编写代码来进行计算,你可以在你的程序中使用它来代替查找表;它取决于速度的重要性.)

例如,这假设CHAR_BIT == 8语言无法保证.

我没有测试过这个.