यदि char
हस्ताक्षरित है, तो उच्च बिट सेट के साथ बाइट मान पर अंकगणित करने के परिणामस्वरूप int
पर प्रचार करते समय साइन एक्सटेंशन का परिणाम होगा; इसलिए, उदाहरण के लिए:
char c = '\xf0';
int res = (c << 24) | (c << 16) | (c << 8) | c;
0xfffffff0
बजाय 0xf0f0f0f0
दे देंगे। इसे 0xff
के साथ मास्किंग से बचा जा सकता है।
char
अभी भी बेहतर हो सकता है यदि आप unsigned char
के बजाय इसका उपयोग करने वाले पुस्तकालयों के साथ इंटरफेसिंग कर रहे हैं।
ध्यान दें कि char *
से unsigned char *
से एक कास्ट हमेशा सुरक्षित (3.9 पी 2) है।
प्रकार T
की एक वस्तु की वस्तु प्रतिनिधित्व अनुक्रम है: unsigned char
के पक्ष में एक दार्शनिक कारण मानक में है कि 3.9p4 यह पक्ष में है, कम से कम बाइट सरणियों कि वस्तुओं की स्मृति अभ्यावेदन पकड़ सकता है प्रतिनिधित्व करने के लिए है N
unsigned char
प्रकार T
के ऑब्जेक्ट द्वारा उठाए गए ऑब्जेक्ट्स, जहां N
sizeof(T)
के बराबर है।
@nightcracker शायद, क्या आप डुप्लिकेट पर इंगित कर सकते हैं? – Cartesius00
डुस्टे https://stackoverflow.com/questions/653336/ – kebs