Разбить Java целое число и получить значения - PullRequest
0 голосов
/ 03 ноября 2011

У меня следующая проблема, у меня есть целое число в java, и биты от 0 до 29 - это отметка времени, биты от 30 до 31 - это уровень (возможные значения 0, 1, 2, 3).Поэтому мой вопрос заключается в том, как получить временную метку как длинное значение из этого целого числа и как получить уровень в виде байта из этого целого числа.

Ответы [ 3 ]

1 голос
/ 03 ноября 2011
int value = ...;
int level = value & 0x3;
long timestamp = (long) ( (value & ~0x3) >>> 2 );
0 голосов
/ 04 ноября 2011

Вот правильный ответ:

   void extract(int input) {
        int level = input >>> 30;
        int timestamp = (input & ~0xC0000000);
    }

Спасибо предыдущим парням за ответы.

0 голосов
/ 03 ноября 2011

При условии, что отметка времени не подписана:

void extract(int input) {
    int timestamp = input >>> 2;  // This takes the entire list of bits and moves drops the right 2.
    int level = input & 0x03;  // this takes the entire list of bits and masks off the right 2.
}

См. http://download.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

...