2012-10-23 25 views
6

Birisi, bu iki Java kodu parçasının neden farklı davrandığını açıklayabilir mi? Birincisi doğru bit sayısını sayar, ancak ikincisi sıfır olmayan sayılar için sadece 1 veya 0 gösterir. Neler olduğunu anlamıyorum. Java'daTutarsız sonuçlar veren Java'da bitwise & operator ve + kullanma

public static void printNumUnitBits(int n){ 
    int num=0; 
    for(int i=0;i<32;i++){ 
     int x=n&1; 
     num=num+x; 
     n=n>>>1; 
     } 
    System.out.println("Number of one bits:"+num); 
    } 

    public static void printNumUnitBits(int n){ 
    int num=0; 
    for(int i=0;i<32;i++){ 
     num=num+n&1; 
     n=n>>>1; 
     } 
    System.out.println("Number of one bits:"+num); 
    } 

cevap

5

, +& daha higher precedence sahiptir. İfadeniz, num ve n ekleyecek ve en düşük biti alacaktır.

Bunu düzeltmek için , ikinci örnekte num=num+(n&1); deyiminde yapmayı deneyin.

+0

Şimdi anlıyorum. harika! Çok teşekkürler :) – Shimano

1

Kullanıcı önceliği. +, &'dan daha yüksek önceliğe sahiptir. Kodunuz

num=num+n&1 

num=(num+n)&1 

Look gibi idam edilecek here

İlgili konular