C में char वास्तव में एक छोटा इंटीजर टाइप है (आमतौर पर 8 बिट्स)। कैरेक्टर मान उनके संख्यात्मक कोड (ASCII/UTF-8) के रूप में संग्रहीत होते हैं।
उदाहरण: ओवरफ्लो और टूज कंप्लीमेंट
#include <stdio.h>
int main() {
char x = 270; // 270 बाइनरी: 1 0000 1110 → निचले 8 बिट्स: 0000 1110 = 14
char y = -130; // -130: 130 = 1000 0010 → टूज कंप्लीमेंट: 0111 1110 = 126
printf("x = %d\n", x); // 14 (चेतावनी: overflow)
printf("y = %d\n", y); // 126 (चेतावनी: overflow)
// साइनडनेस पर निर्भर करता है (char signed/unsigned इम्प्लीमेंटेशन-डिफाइंड)
signed char s = 200; // -56 (यदि 8-बिट साइन्ड)
unsigned char u = 200; // 200
printf("signed: %d, unsigned: %d\n", s, u);
return 0;
}
आउटपुट
x = 14 y = 126 signed: -56 unsigned: 200
विस्तृत व्याख्या
270 का स्टोरेज (8-बिट char में)
270 decimal = 1 0000 1110 binary (9 bits) Lower 8 bits = 0000 1110 = 14 decimal
-130 का स्टोरेज (8-बिट साइन्ड char में)
130 decimal = 1000 0010 binary One's complement = 0111 1101 Two's complement = 0111 1110 = 126 decimal (यदि char unsigned है, तो -130 → 256-130 = 126 भी)
महत्वपूर्ण बिंदु
charका साइनडनेस इम्प्लीमेंटेशन-डिफाइंड है (signed charयाunsigned charस्पष्ट करें)।- ओवरफ्लो पर व्यवहार: अनसाइन्ड के लिए परिभाषित (मॉड्यूलो 2^n), साइन्ड के लिए अनडिफाइंड (लेकिन आमतौर पर टूज कंप्लीमेंट रैपअराउंड)।
<limits.h>सेCHAR_MIN,CHAR_MAX,UCHAR_MAXजांचें।