2016-07-06 3 views
0

Я объединил кучу констант вместе в Android.Как сочетать целочисленные константы в Android?

Например, А = 1, B = 2, C = 3

Затем я использовать функцию называют setParams (А | B | C).

Java преобразует в один конечное значение INT, скажем X.

Как получить отдельные значения от общей величины X, если бы я имел доступ к конечным комбинированных значений целочисленных констант только?

+0

Можете ли вы разместить какой-то код, очень неясно, что вы здесь делаете – tyczj

+1

Если вы используете математическую операцию (вы не указали, что вы делаете), тогда это невозможно, так как для чисел существует много разных возможностей. Пример: результат A * B равен 2. A может быть 1 или 2, но вы точно не знаете – Michael

+0

@Michael Поэтому я бы предположил, что Java имеет своего рода внутренний способ распознавания того, что представляют собой комбинированные значения, правильный? – Kyle

ответ

2

Вы не можете этого сделать, если не существует конкретного правила, регулирующего разложение.

В вашем случае, поскольку C такое же, как A | B, вы не можете сказать.

Если, однако, A, B и C были 1, 2 и 4 соответственно (вы можете увидеть образец?), То можно использовать побитовую арифметику для извлечения компонентов из X. Фактически, это обычное дело.

+0

Значит, вы имеете в виду, что только Java знает, как это было объединено, но мы не будем знать, что такое состав объединенных int-констант? – Kyle

+1

@Kyle: Абсолютно. – Bathsheba

+0

@ Батшеба Пока не удается определить, как был создан результат. например, при A = 1, B = 2, C = 4, тогда A | B | C равно 7. Итак, теперь мы спрашиваем: с учетом значения 7, которое было создано X | Y | Z, что такое X, Y , и Z? Один из возможных ответов - (1,2,4), но (1,1,6) также может быть ответом. – FredK

1

Мне интересно, почему думаете, что Java «должен» отслеживать вещи. Почему это так?

Дело в том: если вы используете переменные в исходном коде, то, конечно, те живут в пределах своей компетенции, как:

void foo() { 
    int a=5, b=3; 
    int c = a * b; 
    do something else with a and b 
    return c; 

Конечно, даже после того, как с вычисляется, а и б еще «существуют», и их ценности могут быть проверены. Но как только метод вернется, все знания о a, b и c исчезнут. Тогда единственной вещью «left» является значение int 15, возвращаемое методом.

(и только для записи: в приведенном выше примере, компилятор будет делать постоянное складывание и в байт-код для этого метода, вы бы даже не найти, Ь, с больше

.

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

  • Нет связанных вопросов^_^