2012-10-23 37 views
6

Ai đó có thể giải thích tại sao hai đoạn mã Java này hoạt động khác nhau? Đầu tiên một cách chính xác đếm số bit nhưng số thứ hai chỉ hiển thị 1 hoặc 0 cho số không khác. Tôi không hiểu chuyện gì đang xảy ra.Sử dụng bitwise & operator và + trong Java cho kết quả không nhất quán

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); 
    } 

Trả lời

5

Trong Java, +higher precedence hơn &. Biểu thức của bạn num+n&1 sẽ thêm numn và sau đó lấy bit thấp nhất.

Để khắc phục điều này, hãy thử tạo tuyên bố trong ví dụ thứ hai num=num+(n&1);.

+0

Ồ..Tôi hiểu ngay bây giờ. tuyệt quá! Cảm ơn rất nhiều :) – Shimano

1

Ưu tiên toán tử. + có mức độ ưu tiên cao hơn &. Mã của bạn

num=num+n&1 

sẽ được thực hiện như

num=(num+n)&1 

Look here

1

Operators precedence

int x=n&1; 
num=num+x; 

num=num+n&1; 

khác nhau.
Bạn đang thực hiện bitwise & trong một thời điểm khác.