22 Mart 2016 Salı

Bit İşlemleri

Java'da Sayılar Unsigned Değildir
Özellikle C++'tan gelenlerin sıkça yaptığı bir hata. 32 bit sayıların kaydırılması için 64 bit kullanılır. Örneğin aşağıdaki kodda 1 signed bir değişken olduğu için istediğimiz sonucu elde etmeyiz.
938372878L | (1 << 31) //results to -1209110770
Şöyle yapmak gerekir.
938372878L | (1L << 31)
Faydalı metodlar
Java'da bitmask ile çalışmak yerine daha kolay metodlar var. highestOneBit, lowestOneBit, numberOfLeadingZeros, numberOfTrailingZeros gibi. Örnek:
assert 64 == Integer.highestOneBit(65);//00000000000000000000000001000001
assert 2 == Integer.bitCount(65);
assert 6 == 31 - Integer.numberOfLeadingZeros(65);//31 - 25
BitSet Sınıfı
BitSet Sınıfı yazısına taşıdım.

Hiç yorum yok:

Yorum Gönder