我想旋转一个字节(非常重要的是它的8位)。我知道Windows提供了一个函数_rotr8
来完成这项任务。我想知道如何在Linux中执行此操作,因为我在那里移植程序。我问这个是因为我需要将位掩码为0.例如:
#define set_bit(byte,index,value) value ? \ //masking bit to 0 and one require different operators The index is used like so: 01234567 where each number is one bit
byte |= _rotr8(0x80, index) : \ //mask bit to 1
byte &= _rotr8(0x7F, index) //mask bit to 0
第二项任务应说明8位进位旋转(01111111 ror index)
答案 0 :(得分:6)
虽然旋转字节相当简单,但这是XY problem的典型示例,因为实际上 根本不需要来旋转一个字节才能实现你的set_bit
宏。一个更简单,更便携的实现方式是:
#define set_bit(byte,index,value) value ? \
byte |= ((uint8_t)0x80 >> index) : \ // mask bit to 1
byte &= ~((uint8_t)0x80 >> index) // mask bit to 0
更好的是,由于这是2014年而不是1984年,因此将其设为内联函数而非宏:
inline uint8_t set_bit(uint8_t byte, uint8_t index, uint8_t value)
{
const uint8_t mask = (uint8_t)0x80 >> index;
return value ?
byte | mask : // mask bit to 1
byte & ~mask; // mask bit to 0
}