How do I extract specific 'n' bits of a 32-bit unsigned integer in C?

前端 未结 8 2342
庸人自扰
庸人自扰 2020-12-02 08:02

Could anyone tell me as to how to extract \'n\' specific bits from a 32-bit unsigned integer in C.

For example, say I want the first 17 bits of the 32-bit value;

8条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-02 08:39

    #define GENERAL__GET_BITS_FROM_U8(source,lsb,msb) \
        ((uint8_t)((source) & \
            ((uint8_t)(((uint8_t)(0xFF >> ((uint8_t)(7-((uint8_t)(msb) & 7))))) & \
                 ((uint8_t)(0xFF << ((uint8_t)(lsb) & 7)))))))
    
    #define GENERAL__GET_BITS_FROM_U16(source,lsb,msb) \
        ((uint16_t)((source) & \
            ((uint16_t)(((uint16_t)(0xFFFF >> ((uint8_t)(15-((uint8_t)(msb) & 15))))) & \
                ((uint16_t)(0xFFFF << ((uint8_t)(lsb) & 15)))))))
    
    #define GENERAL__GET_BITS_FROM_U32(source,lsb,msb) \
        ((uint32_t)((source) & \
            ((uint32_t)(((uint32_t)(0xFFFFFFFF >> ((uint8_t)(31-((uint8_t)(msb) & 31))))) & \
                ((uint32_t)(0xFFFFFFFF << ((uint8_t)(lsb) & 31)))))))
    

提交回复
热议问题