Битовые массивы без STL :: Cетевой уголок Majestio

Битовые массивы без STL


Проверить установлен ли бит

Параметры

Результат

bool

// полагаем, что в байте 8 бит
inline bool GetBit(const unsigned char *iArray, const size_t iNum) {
  return ((*(iArray+(iNum>>3))&(1<<(iNum&7)))!=0);
}
// бит в байте - CHAR_BIT, работает чуть медленее
#include <limits>
inline bool GetBit(const unsigned char *iArray, const size_t iNum) {
  return ((*(iArray+(iNum/CHAR_BIT))&(1<<(iNum%CHAR_BIT)))!=0);
}

Установить бит

Параметры

Результат

void

// полагаем, что в байте 8 бит
inline void SetBit(unsigned char *iArray, const size_t iNum) {
  *(iArray+(iNum>>3)) |= (1<<(iNum&7));
}
// бит в байте - CHAR_BIT, работает чуть медленее
#include <limits>
inline void SetBit(unsigned char *iArray, const size_t iNum) {
  *(iArray+(iNum/CHAR_BIT)) |= 1<<(iNum%CHAR_BIT);
}

Очистить бит

Параметры

Результат

void

// полагаем, что в байте 8 бит
inline void ClrBit(unsigned char *iArray, const size_t iNum) {
  *(iArray+(iNum>>3)) &= ~(1<<(iNum&7));
}
// бит в байте - CHAR_BIT, работает чуть медленее
#include <limits>
inline void ClrBit(unsigned char *iArray, const size_t iNum) {
  *(iArray+(iNum/CHAR_BIT)) &= ~(1<<(iNum%CHAR_BIT));
}

Инвертировать бит

Параметры

Результат

void

// полагаем, что в байте 8 бит
inline void FlpBit(unsigned char *iArray, const size_t iNum) {
  *(iArray+(iNum>>3)) ^= (1<<(iNum&7));
}
// бит в байте - CHAR_BIT, работает чуть медленее
#include <limits>
inline void FlpBit(unsigned char *iArray, const size_t iNum) {
  *(iArray+(iNum/CHAR_BIT)) ^= 1<<(iNum%CHAR_BIT);
}
#C
Рейтинг: 0/5 - 0 голосов