2012-10-23 11 views
6

क्या कोई यह बता सकता है कि जावा कोड के इन दो टुकड़े अलग-अलग व्यवहार क्यों कर रहे हैं? सबसे पहले सही ढंग से बिट्स की संख्या की गणना करता है लेकिन दूसरा एक गैर-शून्य संख्याओं के लिए केवल 1 या 0 प्रदर्शित करता है। मुझे समझ में नहीं आता कि क्या हो रहा है।जावा में बिटवाई और ऑपरेटर और + का प्रयोग असंगत परिणाम देकर

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

उत्तर

5

जावा में, +& से higher precedence है। आपकी अभिव्यक्ति num+n&1num और n जोड़ देगा और फिर सबसे कम बिट ले जाएगा।

इसे ठीक करने के लिए, दूसरे उदाहरण num=num+(n&1); में कथन बनाने का प्रयास करें।

+0

ओह..मैं अब समझता हूं। महान! बहुत के लिए धन्यवाद :) – Shimano

1

ऑपरेटर प्राथमिकता। +& से अधिक प्राथमिकता है। आपका कोड

num=num+n&1 

तरह

num=(num+n)&1 

देखो निष्पादित किया जाएगा here

1

Operators precedence

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

और

num=num+n&1; 

अलग हैं।
आप एक अलग पल में bitwise & कर रहे हैं।

संबंधित मुद्दे