Semblable à la façon dont vous pouvez définir une constante entière en hexadécimal ou octal, puis-je le faire en binaire?
J'admets que c'est une question vraiment facile (et stupide). Mes recherches Google sont vides.
Donc, avec la sortie de Java SE 7, la notation binaire est standard. La syntaxe est assez simple et évidente si vous avez une compréhension décente du binaire:
byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111;
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;
Et spécifiquement sur le point de déclarer des variables de niveau classe comme binaires, il n'y a absolument aucun problème à initialiser une variable statique en utilisant la notation binaire:
public static final int thingy = 0b0101;
Faites juste attention à ne pas déborder les chiffres avec trop de données, sinon vous obtiendrez une erreur de compilation:
byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte
Maintenant, si vous voulez vraiment avoir de la fantaisie, vous pouvez combiner cette autre nouvelle fonctionnalité intéressante dans Java 7 connu sous le nom de littéraux numériques avec des traits de soulignement. Jetez un œil à ces exemples fantaisistes de notation binaire avec des traits de soulignement littéraux :
int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;
N'est-ce pas agréable et propre, pour ne pas mentionner très lisible?
J'ai extrait ces extraits de code d'un petit article que j'ai écrit sur le sujet sur TheServerSide. N'hésitez pas à le consulter pour plus de détails:
Java 7 et notation binaire: maîtrise de l'OCP Java Programmer (OCPJP) Exam
Dans Java 7:
int i = 0b10101010;
Il n'y a pas de littéraux binaires dans les anciennes versions de Java (voir les autres réponses pour les alternatives).
Il n'y a pas de littéraux binaires en Java, mais je suppose que vous pourriez le faire (même si je ne vois pas l'intérêt):
int a = Integer.parseInt("10101010", 2);
La réponse d'Ed Swangren
public final static long mask12 =
Long.parseLong("00000000000000000000100000000000", 2);
fonctionne bien. J'ai utilisé long
au lieu de int
et j'ai ajouté les modificateurs pour clarifier l'utilisation possible comme masque de bits. Il y a cependant deux inconvénients à cette approche.
Je peux suggérer une approche alternative
public final static long mask12 = 1L << 12;
Cette expression montre clairement que le 12e bit est 1 (le décompte commence à 0, de droite à gauche); et lorsque vous passez le curseur de la souris, l'info-bulle
long YourClassName.mask12 = 4096 [0x1000]
apparaît dans Eclipse. Vous pouvez définir des constantes plus compliquées comme:
public final static long maskForSomething = mask12 | mask3 | mask0;
ou explicitement
public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);
La valeur de la variable maskForSomething
sera toujours disponible dans Eclipse au moment du développement.
Déclarez les 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;
et les utiliser
if( (value & ( FLAG_B | FLAG_D )) != 0){
// value has set FLAG_B and FLAG_D
}
Recherchez "syntaxe des littéraux Java" sur Google et vous obtenez quelques entrées.
Il existe une syntaxe octale (préfixez votre numéro avec 0), une syntaxe décimale et une syntaxe hexadécimale avec un préfixe "0x". Mais pas de syntaxe pour la notation binaire.
Quelques exemples:
int i = 0xcafe ; // hexadecimal case
int j = 045 ; // octal case
int l = 42 ; // decimal case
Si vous voulez jouer avec beaucoup de binaires, vous pouvez définir quelques 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;
Réponse un peu plus maladroite:
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() + "\"" );
}
}
qui génère [Java] bb doit être égal à 2, la valeur est "2"