GCC 随进位旋转

gcc rotate with carry

本文关键字:旋转 进位 GCC      更新时间:2023-10-16

我想旋转一个字节(非常重要,它是 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)的重要性

虽然旋转一个字节相当简单,但这是 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

更好的是,由于这是 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
}