2013-11-10 3 views
2

До сих пор у меня есть этот код для создания 16-битной маски. Однако я не знаю, как создать 32-битную маску, используя этот подход. Есть идеи?Как создать 32-битную маску в Java

Редактировать: Я хочу создать 32 маски из 32 бит, каждый со своим соответствующим битом равен 1, а остальные бит равны нулю. Например: маска 1 имеет самый левый бит, равный 1, тогда как остальные биты равны нулю, маска 2 имеет второй левый бит, равный 1, тогда как остальные биты равны нулю. Я не знаю, как объяснить более сжато, но я надеюсь, что вы, ребята, получите представление ...

mask = new int[16]; 
mask[0] = 0x8000; 
mask[1] = 0x4000; 
mask[2] = 0x2000; 
mask[3] = 0x1000; 

mask[4] = 0x0800; 
mask[5] = 0x0400; 
mask[6] = 0x0200; 
mask[7] = 0x0100; 

mask[8] = 0x0080; 
mask[9] = 0x0040; 
mask[10] = 0x0020; 
mask[11] = 0x0010; 

mask[12] = 0x0008; 
mask[13] = 0x0004; 
mask[14] = 0x0002; 
mask[15] = 0x0001 
+2

Почему вы не инициализируете это простым циклом? Почему вы не можете расширить этот подход до вдвое большего числа бит? Зачем вам нужна 32-битная битмаска, как это вообще - какая здесь большая цель? –

+1

Технически, вы уже сделали ... – Sinkingpoint

+0

Извините за непонятный вопрос, я его отредактировал. – uohzxela

ответ

7

Вот как создать 32 битовую маску в Java.

int mask = 0x00010000; // for example. 

И если вы хотите, чтобы создать 32 битовую маску с небольшим N установлен, то

int mask = 1 << N; // Assumes the rightmost bit is numbered zero ... 

И если вы хотите, чтобы создать массив масок, то просто сделать выше в цикле, в очевидная мода.

int[] masks = new int[32]; 
for (int n = 0; n < 32; n++) { 
    masks[n] = 1 << n; 
} 

В действительности, ваши предполагаемые "16 бит маски" также 32 битовые маски, потому что int это 32 битный тип в Java.

И как @Matt Ball, я озадачен тем, что вы на самом деле пытаетесь сделать, и хотите ли вы, что это разумный способ достичь этого. Зачем вам нужен массив масок, когда вы можете создать маску «на лету» с меньшим количеством кода?

+0

Извините за непонятный вопрос. Я отредактировал его. Надеюсь, теперь это имеет смысл. – uohzxela

+0

* «Предполагает, что крайний левый бит нумерует нуль ...» * - Фактически предполагается, что самый правый бит нумеруется. ;) – Dolda2000

+0

Слева, справа ... та же разница :-) –

-2

Я думаю, что у вас все хорошо.

AMOUNT_OF_BITS = 32; 
mask = new long[AMOUNT_OF_BITS]; 
for (long i = 0; i < AMOUNT_OF_BITS; i++) 
{ 
    mask[i] = Math.pow(2,i); 
} 

Это должно сработать, я думаю.

+0

Это не сработает. Math.pow (x, y) возвращает double. Вам придется бросить надолго. mask [i] = (long) Math.pow (2, i); –

Смежные вопросы