2013-02-18 33 views
7

मैं कोड है कि जावा में काम करता है लेकिन सी #मैं बाइट चर में नकारात्मक मान क्यों संग्रहीत नहीं कर सकता?

byte[] buffer = new byte[64]; 
this.buffer[((int)this.count & 0x3F)] = -128; 

यह एक संकलन समय त्रुटि उत्पन्न में नहीं परिवर्तित कर रहा हूँ "स्थिर मान '-128' एक 'बाइट' में परिवर्तित नहीं किया जा सकता है।" मैं बाइट के लिए ऋणात्मक संख्या कैसे संग्रहीत कर सकता हूं?

+7

सी # में एक 'byte' एक _unsigned_ 8 बिट पूर्णांक है। –

+1

sbyte .......... –

+0

@ जॉन विलेम्स आपको इसे एक उत्तर देना चाहिए, मैं इसे ऊपर उठाऊंगा। –

उत्तर

6

byte जावा में डेटा प्रकार (-128 – 127) पर हस्ताक्षर किया गया है। सी # में समतुल्य डेटा प्रकार sbyte है।

तो बराबर सी # कोड इस प्रकार है:

sbyte[] buffer = new sbyte[64]; 
buffer[..] = -128; 

यदि आप चाहते हैं अहस्ताक्षरित बाइट्स (0 – 255), sbyte -128 के रूप में ही बिट पैटर्न के साथ byte की एक सरणी 128 है (0x80)।

byte[] buffer = new byte[64]; 
buffer[..] = 128; 

यह भी देखें:Integral Types Table (C# Reference)

+1

पूरक के लिए, आप निश्चित रूप से कलाकारों को होने के लिए मजबूर कर सकते हैं। ऐसा ऐसा किया जाता है (जब 'बफर' एक बाइट [] 'है): ** 'बफर [अनुक्रमणिका] = अनचेक ((बाइट) (- 128));' ** अनचेक (...) ' जब दो स्थितियों को पूरा किया जाता है तो हिस्सा छोड़ा जा सकता है: _1: _ कास्ट करने का मूल्य ** नहीं है ** एक संकलन-समय निरंतर, और _2: _ कोड ** ** नहीं है ['/ चेक किया गया ' कंपाइलर विकल्प] (http://msdn.microsoft.com/en-us/library/h25wtyxf.aspx)। तो इन मामलों में आप बस 'बफर [इंडेक्स] = (बाइट) nonConstant कहेंगे; '। –

15

सी # में, एक byte एक अहस्ताक्षरित 8 बिट पूर्णांक का प्रतिनिधित्व करता है, और इसलिए एक नकारात्मक मूल्य को रोक नहीं सकते (मान्य मान 0 से 255 तक होती है)। एक विकल्प sbyte है, जो पर 8-बिट पूर्णांक (-128 से 127 पर वैध मान) पर हस्ताक्षर किए गए हैं।