Удалить значение из побитового или комбинированного целого числа?

Используя побитовый оператор Or, вы можете комбинировать целые числа, например целые числа, являющиеся степенью двойки, друг с другом, а затем проверять, содержит ли возвращаемое целое заданное значение. Но есть ли правильный способ удалить значения из возвращаемого целого числа без объединения нового?

В настоящее время я вычитаю значение, которое хочу удалить из объединенного целого числа, но это работает нормально или может вызвать проблемы? Или есть более "правильный" способ сделать это?

Вот мой код:

private void button1_Click(object sender, EventArgs e)
{
    int combinedints = CombineIntegers(CombineIntegers(2, 8), 32); //Combine three integers.
    MessageBox.Show(combinedints.ToString()); //Shows 42.
    MessageBox.Show(RemoveInteger(combinedints, 8).ToString()); //Removes 8 - shows 34.
}

private int CombineIntegers(int a, int b)
{
    return a | b;
}

private int RemoveInteger(int a, int b)
{
    return a -= b;
}

private bool CheckInteger(int a, int b)
{
    return (a & b) == b;
}

person Visual Vincent    schedule 11.07.2015    source источник
comment
комбинировать друг с другом целые числа, являющиеся степенями числа 2'. Вы также можете комбинировать другие целые числа.   -  person GolezTrol    schedule 11.07.2015
comment
@GolezTrol: Изменено... :)   -  person Visual Vincent    schedule 11.07.2015
comment
В чем идея RemoveInteger? Если unset, то это очень неправильно.   -  person leppie    schedule 11.07.2015
comment
@leppie: идея состоит в том, чтобы удалить значение из основного целого числа. Если я объединим 2, 8 и 32, это будет равно 42. Затем я могу использовать RemoveInteger, чтобы удалить одно из этих значений, если захочу. (например, 8).   -  person Visual Vincent    schedule 11.07.2015
comment
@VisualVincent: Но, учитывая combine, подразумевается ли побитовая операция, как подразумевает ваш принятый ответ? ;п   -  person leppie    schedule 11.07.2015
comment
Ладно, это становится смешно. Мои очень старые вопросы начинают получать отрицательные голоса ... Разве у очевидного ненавистника нет ничего лучше? (Я не знаю, хейтер ли это, но это начинает казаться очень странным). Я могу быть параноиком, но мне кажется, что это очень запланировано.   -  person Visual Vincent    schedule 08.05.2016


Ответы (1)


person    schedule
comment
Это было бы логично, но ОП этого не подразумевает. - person leppie; 11.07.2015
comment
@leppie: проверка значения также логична. Это имеет значение или...? - person Visual Vincent; 11.07.2015
comment
@VisualVincent: это называется битовыми операциями или, точнее, булевой математикой (основанной на булевой алгебре). Прочтите об этом, это довольно увлекательно, что вы можете сделать с серией единиц и нулей :D - person leppie; 11.07.2015