Onaltılık veya sekizlik olarak bir tamsayı sabitini nasıl tanımlayabildiğinize benzer şekilde, bunu ikili olarak yapabilir miyim?
Bunun gerçekten kolay (ve aptalca) bir soru olduğunu kabul ediyorum. Google aramalarım boş çıkıyor.
Onaltılık veya sekizlik olarak bir tamsayı sabitini nasıl tanımlayabildiğinize benzer şekilde, bunu ikili olarak yapabilir miyim?
Bunun gerçekten kolay (ve aptalca) bir soru olduğunu kabul ediyorum. Google aramalarım boş çıkıyor.
Yanıtlar:
Bu nedenle, Java SE 7'nin piyasaya sürülmesiyle birlikte, ikili gösterim standart olarak kutudan çıkar. Sözdizimi oldukça açık ve eğer ikiliyi iyi bir şekilde anlıyorsanız açıktır:
byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111;
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;
Ve özellikle sınıf düzeyinde değişkenleri ikili olarak bildirme noktasında, ikili gösterimi kullanarak statik bir değişkeni başlatırken kesinlikle hiçbir sorun yoktur:
public static final int thingy = 0b0101;
Sadece çok fazla veriyle sayıları aşmamaya dikkat edin, yoksa bir derleyici hatası alırsınız:
byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte
Şimdi, gerçekten süslü olmak istiyorsanız, Java 7'deki sayısal değişmez değerler olarak bilinen diğer temiz yeni özelliği alt çizgilerle birleştirebilirsiniz. Değişmez alt çizgilerle ikili gösterimlerin bu süslü örneklerine bir göz atın:
int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;
Şimdi o kadar güzel ve temiz değil mi?
Bu kod parçalarını TheServerSide'da konu hakkında yazdığım küçük bir makaleden aldım. Daha fazla ayrıntı için kontrol etmekten çekinmeyin:
Java 7 ve Binary Notation: OCP Java Programmer (OCPJP) Sınavında Ustalaşma
Java 7'de:
int i = 0b10101010;
Java'nın eski sürümlerinde ikili değişmez bilgi yoktur (alternatifler için diğer yanıtlara bakın).
_
, diziyi daha okunaklı hale getirecek karakterler olabileceğini de int i = 0b1010_1010_0011;
Java'da ikili literal yoktur, ancak bunu yapabileceğinizi sanıyorum (asıl noktayı görmeme rağmen):
int a = Integer.parseInt("10101010", 2);
Ed Swangren'den cevap
public final static long mask12 =
Long.parseLong("00000000000000000000100000000000", 2);
iyi çalışıyor. Bunun long
yerine, int
bit maskesi olarak olası kullanımı netleştirmek için değiştiricileri kullandım ve ekledim. Yine de bu yaklaşımın iki sakıncası vardır.
Alternatif yaklaşım önerebilirim
public final static long mask12 = 1L << 12;
Bu ifade, 12. bitin 1 olduğunu açıkça gösterir (sayım 0'dan sağdan sola başlar); ve fare imlecinin üzerine geldiğinizde, araç ipucu
long YourClassName.mask12 = 4096 [0x1000]
Eclipse'de görünür. Daha karmaşık sabitleri şöyle tanımlayabilirsiniz:
public final static long maskForSomething = mask12 | mask3 | mask0;
veya açıkça
public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);
Değişkenin değeri maskForSomething
, geliştirme sırasında Eclipse'de hala mevcut olacaktır.
Sabitleri bildirin:
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;
ve onları kullan
if( (value & ( FLAG_B | FLAG_D )) != 0){
// value has set FLAG_B and FLAG_D
}
Google'da "Java değişmezleri sözdizimi" ni arayın ve bazı girişler bulun.
Sekizlik bir sözdizimi (numaranızın önüne 0 gelir), ondalık sözdizimi ve "0x" ön ekiyle onaltılık sözdizimi vardır. Ancak ikili gösterim için sözdizimi yok.
Bazı örnekler:
int i = 0xcafe ; // hexadecimal case
int j = 045 ; // octal case
int l = 42 ; // decimal case
byte b = 0b01000001
(daha iyi okuma için byte b = 0b0100_0001
).
Çok sayıda ikili dosya ile uğraşmak istiyorsanız, bazı sabitler tanımlayabilirsiniz:
public static final int BIT_0 = 0x00000001;
public static final int BIT_1 = 0x00000002;
vb.
veya
public static final int B_00000001 = 0x00000001;
public static final int B_00000010 = 0x00000002;
public static final int B_00000100 = 0x00000004;