Semelhante a como você pode definir uma constante inteira em hexadecimal ou octal, posso fazer isso em binário?
Admito que essa é uma pergunta muito fácil (e estúpida). Minhas pesquisas no google estão vazias.
Semelhante a como você pode definir uma constante inteira em hexadecimal ou octal, posso fazer isso em binário?
Admito que essa é uma pergunta muito fácil (e estúpida). Minhas pesquisas no google estão vazias.
Respostas:
Portanto, com o lançamento do Java SE 7, a notação binária vem padrão fora da caixa. A sintaxe é bastante direta e óbvia se você tiver um entendimento decente de binário:
byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111;
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;
E especificamente no ponto de declarar variáveis de nível de classe como binários, não há absolutamente nenhum problema ao inicializar uma variável estática usando notação binária:
public static final int thingy = 0b0101;
Apenas tome cuidado para não sobrecarregar os números com muitos dados, ou você receberá um erro do compilador:
byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte
Agora, se você realmente quiser ficar mais sofisticado, pode combinar aquele outro novo recurso interessante do Java 7 conhecido como literais numéricos com sublinhados. Dê uma olhada nestes exemplos sofisticados de notação binária com sublinhados literais:
int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;
Agora, isso não é bonito e limpo, para não mencionar altamente legível?
Retirei esses trechos de código de um pequeno artigo que escrevi sobre o tópico no TheServerSide. Sinta-se à vontade para conferir para mais detalhes:
Java 7 e notação binária: como dominar o exame OCP Java Programmer (OCPJP)
Em Java 7:
int i = 0b10101010;
Não há literais binários em versões anteriores do Java (veja outras respostas para alternativas).
_
caracteres para tornar a sequência mais legível: int i = 0b1010_1010_0011;
Não há literais binários em Java, mas suponho que você possa fazer isso (embora eu não entenda o ponto):
int a = Integer.parseInt("10101010", 2);
A resposta de Ed Swangren
public final static long mask12 =
Long.parseLong("00000000000000000000100000000000", 2);
funciona bem. Usei em long
vez de int
e adicionei os modificadores para esclarecer o possível uso como máscara de bits. Existem, porém, dois inconvenientes com essa abordagem.
Posso sugerir uma abordagem alternativa
public final static long mask12 = 1L << 12;
Essa expressão torna óbvio que o 12º bit é 1 (a contagem começa em 0, da direita para a esquerda); e quando você passa o cursor do mouse, a dica de ferramenta
long YourClassName.mask12 = 4096 [0x1000]
aparece no Eclipse. Você pode definir constantes mais complicadas como:
public final static long maskForSomething = mask12 | mask3 | mask0;
ou explicitamente
public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);
O valor da variável maskForSomething
ainda estará disponível no Eclipse no momento do desenvolvimento.
Declare constantes:
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;
e usá-los
if( (value & ( FLAG_B | FLAG_D )) != 0){
// value has set FLAG_B and FLAG_D
}
Procure por "sintaxe de literais Java" no Google e você encontrará algumas entradas.
Há uma sintaxe octal (prefixe seu número com 0), sintaxe decimal e sintaxe hexadecimal com um prefixo "0x". Mas nenhuma sintaxe para notação binária.
Alguns exemplos:
int i = 0xcafe ; // hexadecimal case
int j = 045 ; // octal case
int l = 42 ; // decimal case
byte b = 0b01000001
(para uma melhor leitura byte b = 0b0100_0001
).
Se você quiser mexer com muitos binários, pode definir algumas constantes:
public static final int BIT_0 = 0x00000001;
public static final int BIT_1 = 0x00000002;
etc.
ou
public static final int B_00000001 = 0x00000001;
public static final int B_00000010 = 0x00000002;
public static final int B_00000100 = 0x00000004;