Самый быстрый способ вычислить битовую маску X-bit?

Я пытался решить эту проблему некоторое время, но не мог только с целочисленными арифметическими и побитовыми операторами. Однако я думаю его возможное, и это должно быть довольно легко. Что я пропускаю?

Проблема: для получения целочисленного значения произвольной длины (это не относится к проблеме) с, он - X младших значащих наборов битов к 1 и остальные к 0. Например, учитывая номер 31, я должен получить целочисленное значение, которое равняется 0x7FFFFFFF (31 младший значащий бит равняется 1 и остальным нули).

Конечно, с помощью осуществления операции ИЛИ цикла смещенный 1 для целого числа X раз сделает задание. Но это не решение, которое я ищу. Это должно быть больше в направлении (X << Y - 1), таким образом использование никаких циклов.

5
задан Daniel A.A. Pelsmaeker 18 April 2010 в 23:31
поделиться

3 ответа

Попробуйте следующее: (1 << X) - 1

{{ 1}}
6
ответ дан 14 December 2019 в 04:33
поделиться

Попробуйте следующее:

uint.MaxValue >> (32 - something)
2
ответ дан 14 December 2019 в 04:33
поделиться

Я думаю, что следующее должно работать:

int mask = (int)Math.Pow(2, 31) - 1;

Это единственное математическое выражение, но оно не особенно эффективно, потому что вычисление мощности таким способом не очень хорошая идея. Однако, поскольку мы вычисляем степень двойки, мы можем сделать то же самое с помощью shift:

int mask = (1 << 31) - 1;
0
ответ дан 14 December 2019 в 04:33
поделиться