nim*_*son 0 c c++ bit-manipulation
我想旋转一个字节(非常重要,它是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
Run Code Online (Sandbox Code Playgroud)
第二项任务应说明8位进位旋转的重要性 (01111111 ror index)
虽然旋转一个字节相当简单,但这是一个XY问题的典型例子,因为实际上你根本不需要旋转一个字节来实现你的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
Run Code Online (Sandbox Code Playgroud)
更好的是,因为这是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
}
Run Code Online (Sandbox Code Playgroud)