2013-04-30 20 views
7

Performans açısından bitly işlemleri için BigInteger (BigInteger.and BigInteger.or) kullanılarak saf bitly işlemleri (& |^~) kullanmanın bir avantajı var mı? bellek? başka herhangi bir şey?Java bitly işlemi Vs BigInteger

BigInteger'i bitly işlemleri için kullanıyorum çünkü sonuçta ortaya çıkan kod çok daha okunabilir. i kullanarak olacaktır kodu

örnek:

BigInteger bNum1 = new BigInteger("0"); 
BigInteger bNum2 = new BigInteger("0"); 
BigInteger bNum3 = new BigInteger("0"); 
bNum1 = bNum1.setBit(0); 
bNum2 = bNum2.setBit(1); 
bNum3 = bNum3.setBit(2); 

BigInteger bMask = bNum3.or(bNum1); 

System.out.println(bMask.and(bNum1).equals(bMask)); 
System.out.println(bMask.and(bNum2).equals(bMask)); 
System.out.println(bMask.and(bNum3).equals(bMask)); 
System.out.println(bMask.and(bMask).equals(bMask)); 


int num1 = 1 << 0; 
int num2 = 1 << 1; 
int num3 = 1 << 2; 

int mask = num3 | num1; 

System.out.println((mask & num1) == mask); 
System.out.println((mask & num2) == mask); 
System.out.println((mask & num3) == mask); 
System.out.println((mask & mask) == mask); 
+0

BigInteger'e dönüştürmek zorunda değilsiniz? –

+0

Hayır, işlemler maskeleme amacıyla küçük sayılar (maks. 2^10) arasındadır. –

+0

Yani, yeni bir BigInteger nesnesi veya iki tane oluşturmak zorunda kalmamanız büyük olasılıkla oldukça büyük bir performans bonusu. –

cevap

7

her zaman ilkelleri ile hem performans ve bellek açısından işe daha etkilidir. Ama BigInteger, int ve long'dan daha büyük sayılarla çalışabilir. Örneğin,

BigInteger b1 = new BigInteger("1111111111111111111111111111111111111111111111111"); 
BigInteger b2 = new BigInteger("2222222222222222222222222222222222222222222222222"); 
BigInteger b3 = b1.and(b2); 
+0

bitümden daha uzun bir sayı için bir kullanım durumu durumu verebilir misiniz? –

+1

easy, bkz. Güncelleme –

+1

Sanırım Noam, kullanım durumunu ve nasıl uygulanacağını sormadı. IPv6 adresleri için alt ağ maskeleri (128 bit) işleme biri olacaktır. – jarnbjo

İlgili konular