В Java я могу определить целочисленную константу в двоичном формате?

Вот, пожалуйста:

SELECT 
  DISTINCT(`ID`)
FROM 
  `TABLE` 
WHERE 
  `subject` IN ('science', 'maths');

Обновлено:

CREATE TABLE test (
  id INT  ,
  subject varchar(30)
);

INSERT INTO test (id, subject) VALUES 
(1,'science'),
(1,'maths'),
(2,'maths'),
(3,'science'),
(4,'science'),
(4,'biology'),
(4,'maths'),
(5,'biology'),
(5,'economics');

SELECT
  DISTINCT(a.id)
FROM 
  test a
  LEFT JOIN test b on b.id=a.id  AND b.subject IN ('science', 'maths')
WHERE 
  a.subject='science' AND b.subject='maths';
/*output: 1, 4*/

Надеюсь, это поможет,

84
задан Jonik 15 May 2009 в 07:34
поделиться

6 ответов

В Java нет двоичных литералов, но я полагаю, что вы могли бы это сделать (хотя я не вижу в этом смысла):

int a = Integer.parseInt("10101010", 2);
53
ответ дан 24 November 2019 в 08:24
поделиться

Выполните поиск по запросу «синтаксис литералов Java» в Google, и вы найдете несколько записей.

Существует восьмеричный синтаксис (префикс числа с 0), десятичный синтаксис и шестнадцатеричный синтаксис с Префикс "0x". Но нет синтаксиса для двоичной записи.

Некоторые примеры:

int i = 0xcafe ; // hexadecimal case
int j = 045 ;    // octal case
int l = 42 ;     // decimal case
12
ответ дан 24 November 2019 в 08:24
поделиться

Чуть более неудобный ответ:

public class Main {

    public static void main(String[] args) {
        byte b = Byte.parseByte("10", 2);
        Byte bb = new Byte(b);
        System.out.println("bb should be 2, value is \"" + bb.intValue() + "\"" );
    }

}

который выводит [java] bb должно быть 2, значение "2"

0
ответ дан 24 November 2019 в 08:24
поделиться

Ответ Эда Свангрена

public final static long mask12 = 
  Long.parseLong("00000000000000000000100000000000", 2);

работает нормально. Я использовал long вместо int и добавил модификаторы, чтобы прояснить возможное использование в качестве битовой маски. Однако у этого подхода есть два неудобства.

  1. Прямой ввод всех этих нулей подвержен ошибкам
  2. Результат недоступен в десятичном или шестнадцатеричном формате на момент разработки

Я могу предложить альтернативный подход

public final static long mask12 = 1L << 12;

Это выражение делает очевидным, что 12-й бит равен 1 (счет начинается с 0, справа налево); и когда вы наводите курсор мыши, в Eclipse появляется всплывающая подсказка

long YourClassName.mask12 = 4096 [0x1000]

. Вы можете определить более сложные константы, например:

public final static long maskForSomething = mask12 | mask3 | mask0;

или явно

public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);

. Значение переменной maskForSomething по-прежнему будет доступно в Eclipse во время разработки.

18
ответ дан 24 November 2019 в 08:24
поделиться

В Java 7:

int i = 0b10101010;

В старых версиях Java нет двоичных литералов (альтернативы см. В других ответах).

152
ответ дан 24 November 2019 в 08:24
поделиться

Если вы хотите возиться с большим количеством двоичных файлов, вы можете определить некоторые константы:

public static final int BIT_0 = 0x00000001;
public static final int BIT_1 = 0x00000002;

и т. Д.

или

public static final int B_00000001 = 0x00000001;
public static final int B_00000010 = 0x00000002;
public static final int B_00000100 = 0x00000004;
2
ответ дан 24 November 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: