блог-форум о программировании

Вы не вошли.


Deprecated: Function create_function() is deprecated in /home/user2058794/www/majestio.info/include/class/geshi.php on line 4698

#1 2017-11-20 15:59:31

Majestio
Администратор
Здесь с 2017-11-17
Сообщений: 73
Windows 10Firefox 57.0

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


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


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

Параметры

  • unsigned char *iArray - ссылка на битовый массив

  • size_t iNum - порядковый номер проверяемого бита, начиная с нуля

Результат

  • 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);
}
2) Установить бит

Параметры

  • unsigned char *iArray - ссылка на битовый массив

  • size_t iNum - порядковый номер устанавливаемого бита, начиная с нуля

Результат

  • 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);
}
3) Очистить бит

Параметры

  • unsigned char *iArray - ссылка на битовый массив

  • size_t iNum - порядковый номер очищаемого бита, начиная с нуля

Результат

  • 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));
}
4) Инвертировать бит

Параметры

  • unsigned char *iArray - ссылка на битовый массив

  • size_t iNum - порядковый номер инвертируемого бита, начиная с нуля

Результат

  • 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);
}

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] CCBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.055 сек, 7 запросов выполнено - Использовано памяти: 2.19 Мбайт (Пик: 2.71 Мбайт) ]