5

के बीच मैं जावा में एक बिटवाई या byte मान करने की कोशिश कर रहा हूं।जावा बिटवाइ या बाइट और इंट

उदाहरण के लिए, मैं चला रहा हूँ:

byte b = (byte)0b11111111; 
int result = 0 | b; 

मेरे इस के लिए अपेक्षित परिणाम 0b00000000 00000000 00000000 11111111, या 255 होगा। हालांकि, मुझे -1, या 0b11111111 11111111 11111111 11111111 प्राप्त हो रहा है।

मैं यह सोचते हैं रहा है कि जावा आपरेशन प्रदर्शन से पहले संकेत विस्तार के माध्यम से मेरी एक int में byte बदल देता है, और अगर वहाँ एक तरह से एक सा मास्क (0b11111111) का उपयोग कर के बिना मेरे वांछित परिणाम मिल गया था मैं सिर्फ उत्सुक था।

+1

"थोड़ा मास्क का उपयोग किए बिना" जवाब बिटमैस्क का उपयोग करना है। जावा में इसके आसपास वास्तव में कोई रास्ता नहीं है। –

उत्तर

7

थोड़ा मास्क का उपयोग करना byte को int में कनवर्ट करते समय साइन एक्सटेंशन अक्षम करने का मानक समाधान है। आपको जावा कुरूपता के इस टुकड़े को स्वीकार करना होगा।

int result = 0 | (b & 0xFF); 
संबंधित मुद्दे