2011-04-08 13 views
6

मैं कुछ कोड देख रहा था जो प्रीपेन्ड 0s के साथ बाइनरी फॉर्म में एक संख्या आउटपुट करता है।जावा बिट मैनिपुलेशन - क्या करता है (num >> = 1) क्या करता है?

byte number = 48; 
    int i = 256; //max number * 2 
    while((i >>= 1) > 0) { 
     System.out.print(((number & i) != 0 ? "1" : "0")); 
    } 

और यह समझ में नहीं आया कि मैं >> = 1 क्या करता है। मुझे पता है कि 1 >> 1 बिट्स को दाईं ओर 1 बिट से बदल दिया गया है लेकिन यह समझ में नहीं आया कि "=" क्या करता है और AFAIK, ">> =" की खोज करने के लिए यह संभव नहीं है कि इसका अर्थ क्या है।

+0

मामूली सुधार '((i >>> = 1)! = 0) होगा क्योंकि वर्तमान लूप कुछ भी नहीं करेगा यदि आपने इसे 'i = 1 << 31' दिया है और आप कभी प्रिंटआउट नहीं कर सकते 32-बिट संख्या का शीर्ष बिट। –

उत्तर

11

i >>= 1 सिर्फ उसी तरह i = i >> 1 के लिए shorhand जाता है कि i += 4 के लिए i = i + 4

संपादित करें कम है: विशेष रूप से, उन compound assignment operators के दोनों उदाहरण हैं।

+1

और, विशेष रूप से, यह एक साइन-विस्तारित शिफ्ट है। –

+0

गणितीय रूप से 1 से 1 संख्या स्थानांतरित करने के लिए संख्या 2 को विभाजित करने के बराबर है। – yasouser