#ifndef BITOPS_H_ #define BITOPS_H_ /** \brief Suche das letzte gesetzte Bit in einem 16 bit Wert. * * \param value Der Wert der durchsucht werden soll. * * \return Gibt die Bitnummer plus 1 zurueck, oder * 0 wenn kein Bit gesetzt ist. */ static inline uint8_t fls16(uint16_t value) { uint8_t ret = 16; if (!value) return 0; if ((value & 0xFF00u) == 0) { value <<= 8; ret -= 8; } if ((value & 0xF000u) == 0) { value <<= 4; ret -= 4; } if ((value & 0xC000u) == 0) { value <<= 2; ret -= 2; } if ((value & 0x8000u) == 0) { value <<= 1; ret -= 1; } return ret; } /** \brief Suche das letzte gesetzte Bit in einem 8 bit Wert. * * \param value Der Wert der durchsucht werden soll. * * \return Gibt die Bitnummer plus 1 zurueck, oder * 0 wenn kein Bit gesetzt ist. */ static inline uint8_t fls8(uint8_t value) { uint8_t ret = 8; if (!value) return 0; if ((value & 0xF0u) == 0) { value <<= 4; ret -= 4; } if ((value & 0xC0u) == 0) { value <<= 2; ret -= 2; } if ((value & 0x80u) == 0) { value <<= 1; ret -= 1; } return ret; } #endif /* BITOPS_H_ */