Как обратиться к этому биту?

Речь идёт о реализации механизма "Mark and Sweep", для которой нужно обращаться к объекту и помечать его. Обращаться нужно именно к биту объекта(бит, указывающий, достижим ли этот объект из программы или нет), обратившись и изменив значение которого я смогу продолжить реализацию этого алгоритма. Так вот, как обратиться к этому биту?введите сюда описание изображения


Ответы (1 шт):

Автор решения: return

Всё просто:

  • x | (1 << n) – установка бита
  • x & ~(1 << n) – обнуление бита
  • x ^ (1 << n) – переключение бита

Тут x – исходное число (int, long, ...), а n – позиция бита.


Или же можно использовать enum:

enum ObjectAttributes
{
    ...
    IsCollected = 0x1, // или 0x2, 0x4, 0x8, 0x10, 0x20, ...
    ...
}

И дальше используем так:

  • obj.Attributes |= ObjectAttributes.IsCollected – установка бита
  • obj.Attributes &= ~ObjectAttributes.IsCollected – обнуление бита
  • obj.Attributes ^= ObjectAttributes.IsCollected – переключение бита

Где obj – ваш объект.

→ Ссылка