Tag: 比特阵

取消设置单词中最重要的位(int32)

如何取消设置一个字的最重要的设置位(例如0x00556844 – > 0x00156844)? gcc中有__builtin_clz ,但它只计算零,这对我来说是不必要的。 另外,我应该如何为msvc或intel c编译器替换__builtin_clz? 目前我的代码是 int msb = 1<< ((sizeof(int)*8)-__builtin_clz(input)-1); int result = input & ~msb; 更新:好的,如果你说这段代码相当快,我会问你,我应该如何为这段代码添加可移植性? 这个版本适用于GCC,但是MSVC和ICC?

在位上旋转8×8块中的位的最快方法是什么?

我不确定我正在尝试做什么的确切术语。 我有一个以8 bytes字节存储的8×8 bits块,每个字节存储一行。 当我完成后,我希望每个字节存储一列。 例如,当我完成时: Byte0out = Byte0inBit0 + Byte1inBit0 + Byte2inBit0 + Byte3inBit0 + … Byte1out = Byte0inBit1 + Byte1inBit1 + Byte2inBit1 + Byte3inBit1 + … 在C中表现良好的最简单方法是什么?