unsigned char की परिभाषा
C++ में हमने कैरेक्टर टाइप डेटा char देखा है। कभी-कभी हमने unsigned char भी देखा है। तो यहां हम देखेंगे कि मूल रूप से unsigned char का क्या अर्थ है। साइन्ड चार और अनसाइन्ड चार में क्या बुनियादी अंतर हैं?
साइन्ड vs अनसाइन्ड चार
साइन्ड चार और अनसाइन्ड चार दोनों एकल कैरेक्टर स्टोर करने के लिए उपयोग किए जाते हैं। वेरिएबल कैरेक्टर्स का ASCII वैल्यू स्टोर करता है। उदाहरण के लिए यदि 'A' स्टोर किया जाता है, तो वास्तव में यह 65 रखेगा।
साइन्ड चार के लिए हमें signed कीवर्ड लिखने की आवश्यकता नहीं है। लेकिन अनसाइन्ड के लिए, हमें कीवर्ड का उल्लेख करना होगा। सिंटैक्स:
unsigned char ch = 'n';
रेंज तुलना
साइन्ड और अनसाइन्ड चार दोनों 8-बिट के हैं।
| टाइप | रेंज | मान |
|---|---|---|
signed char / char | -128 से +127 | 128 मान |
unsigned char | 0 से 255 | 256 मान |
ASCII और एक्सटेंडेड ASCII
- बेसिक ASCII मान 0 से 127 की रेंज में हैं
- ASCII का बाकी हिस्सा **एक्सटेंडेड ASCII** के रूप में जाना जाता है (128-255)
charयाsigned charका उपयोग करके हम एक्सटेंडेड ASCII मान स्टोर नहीं कर सकते (128 से ऊपर के मान ऋणात्मक के रूप में व्याख्या किए जाएंगे)unsigned charका उपयोग करके, हम एक्सटेंडेड भाग को स्टोर कर सकते हैं क्योंकि इसकी रेंज 0 से 255 है
उदाहरण: एक्सटेंडेड ASCII
#include <iostream>
using namespace std;
int main() {
unsigned char uch = 200; // एक्सटेंडेड ASCII
signed char sch = 200; // ओवरफ्लो: -56 बन जाता है
cout << "unsigned char (200): " << static_cast(uch) << endl;
cout << "signed char (200): " << static_cast(sch) << endl;
// कैरेक्टर के रूप में प्रिंट (टर्मिनल एन्कोडिंग पर निर्भर)
cout << "As char: '" << uch << "' vs '" << sch << "'" << endl;
return 0;
}
आउटपुट
unsigned char (200): 200 signed char (200): -56 As char: 'È' vs ''
कब उपयोग करें
| स्थिति | अनुशंसित टाइप |
|---|---|
| टेक्स्ट कैरेक्टर्स (ASCII) | char या std::string |
| रॉ बाइट डेटा (बाइनरी) | unsigned char या std::byte (C++17) |
| छोटे इंटीजर्स (0-255) | unsigned char या uint8_t |
| छोटे साइन्ड इंटीजर्स (-128 से 127) | signed char या int8_t |
मॉडर्न C++: std::byte (C++17)
#include <cstddef> // std::byte के लिए
std::byte b = std::byte{200}; // टाइप-सेफ बाइट
// std::byte पर अंकगणित नहीं - कन्वर्ट करें:
int val = std::to_integer<int>(b); // 200
महत्वपूर्ण: char की साइन्डनेस कार्यान्वयन-निर्भर है
// char साइन्ड या अनसाइन्ड हो सकता है (कंपाइलर-निर्भर) char c = 200; // कुछ कंपाइलर्स पर -56, अन्य पर 200 // पोर्टेबल कोड के लिए स्पष्ट रहें: signed char sc = 200; // गारंटीड -56 unsigned char uc = 200; // गारंटीड 200