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.
Java'da bitmask ile çalışmak yerine daha kolay metodlar var. highestOneBit, lowestOneBit, numberOfLeadingZeros, numberOfTrailingZeros gibi. Örnek:
Ö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ı metodlarJava'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ı
Hiç yorum yok:
Yorum Gönder