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





константы строковые (8)


Итак, с выпуском Java SE 7 двоичная нотация поставляется стандартно из коробки. Синтаксис довольно прямолинейный и очевидный, если у вас есть достойное понимание двоичного:

byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111; 
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;

И, в частности, с точки зрения объявления переменных уровня класса как двоичных файлов, нет никакой проблемы при инициализации статической переменной с использованием двоичной записи:

public static final int thingy = 0b0101;

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

byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte

Теперь, если вы действительно хотите получить фантазию, вы можете объединить эту другую опрятную новую функцию в Java 7, известную как числовые литералы с подчеркиванием. Взгляните на эти причудливые примеры двоичной нотации с буквальными символами подчеркивания:

int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;

Теперь это не так красиво и чисто, не говоря уже о читаемом?

Я вытащил эти фрагменты кода из небольшой статьи, которую я написал о теме на TheServerSide. Не стесняйтесь проверить его для получения дополнительной информации:

Java 7 и двоичная нотация: Освоение экзамена OCP Java Programmer (OCPJP)

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

Я признаю, что это очень простой (и глупый) вопрос. Мои поисковые запросы google пусты.




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

Объявить константы:

public static final int FLAG_A = 1 << 0;
public static final int FLAG_B = 1 << 1;
public static final int FLAG_C = 1 << 2;
public static final int FLAG_D = 1 << 3;

и использовать их

if( (value & ( FLAG_B | FLAG_D )) != 0){
    // value has set FLAG_B and FLAG_D
}



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

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»,




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

int a = Integer.parseInt("10101010", 2);



В Java 7:

int i = 0b10101010;

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




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

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;



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

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

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

int i = 0xcafe ; // hexadecimal case
int j = 045 ;    // octal case
int l = 42 ;     // decimal case



public static Random RANDOM = new Random(System.nanoTime());

public static final float random(final float pMin, final float pMax) {
    return pMin + RANDOM.nextFloat() * (pMax - pMin);
}




java syntax binary