2009-07-23 16 views
63

मैंने यह unsigned "टाइपलेस" प्रकार को दो बार उपयोग किया है, लेकिन इसके लिए कभी स्पष्टीकरण नहीं देखा है। मुझे लगता है कि एक संबंधित signed प्रकार है। यहाँ एक उदाहरण है:हस्ताक्षरित डेटाटाइप क्या है?

static unsigned long next = 1; 
/* RAND_MAX assumed to be 32767 */ 
int myrand(void) { 
    next = next * 1103515245 + 12345; 
    return((unsigned)(next/65536) % 32768); 
} 
void mysrand(unsigned seed) { 
    next = seed; 
}

क्या मैं अब तक इकट्ठे हुए हैं:
- एक और प्रकार कास्टिंग के लिए यह एक आशुलिपि के रूप में इस्तेमाल किया जा सकता है - अपने सिस्टम पर, sizeof(unsigned) = 4 (32-बिट अहस्ताक्षरित int पर संकेत)
हस्ताक्षरित संस्करण के लिए:

signed long int i = -42; 
printf("%u\n", (unsigned)i); 

क्या यह एएनएसआई सी है, या सिर्फ एक कंपाइलर एक्सटेंशन है?

उत्तर

110

unsigned वास्तव में unsigned int के लिए एक आशुलिपि है, और इसलिए मानक सी में परिभाषित

23

unsigned मतलब है unsigned intsigned का अर्थ है signed intunsigned का उपयोग कर सी में unsigned int घोषित करने का आलसी तरीका है हां यह एएनएसआई है।

6

सी, unsignedunsigned int के लिए शॉर्टकट है।

आप के लिए long int

एक शॉर्टकट है कि long के लिए एक ही है और यह भी घोषणा करने के लिए संभव है एक unsigned long (यह एक unsigned long int हो जाएगा)।

यह, एएनएसआई मानक

+0

हां। 'हस्ताक्षरित' 'हस्ताक्षरित int 'जैसा ही है, लेकिन मैंने _WG14/N1124 कमेटी ड्राफ्ट पर खोज की - 6 मई, 2005 आईएसओ/आईईसी 98 99: टीसी 2_' हस्ताक्षरित 'के लिए और परिभाषित नहीं किया जा सका ... क्या आप उस भाग को उद्धृत करें जहां इसे परिभाषित किया गया है? – user454322

11
सी में

ऐतिहासिक में है अगर आप एक डेटाप्रकार "पूर्णांक" मान लिया था छोड़े गए। तो "हस्ताक्षरित" "हस्ताक्षरित int" के लिए एक लघुरूप है। इसे लंबे समय तक खराब अभ्यास माना जाता है, लेकिन वहां अभी भी एक उचित मात्रा में कोड है जो इसका उपयोग करता है।

+6

मुझे पता नहीं था कि यह बुरा अभ्यास था। क्या इसके लिए कोई तर्क है? 'लंबी int' के बजाय 'लंबा' बहुत आम है इसलिए मुझे यकीन नहीं है कि 'हस्ताक्षरित int' के बजाय 'हस्ताक्षरित' क्यों स्वीकार्य नहीं होगा। –

+10

@ चार्ल्स बेली: इन दिनों - कम से कम यदि आप औपचारिक - लंबे, int, लघु और चार के बजाय व्यावहारिक हैं, तो वे अलग-अलग आकार के रूप में अलग-अलग डेटा प्रकार मानते हैं) बिना हस्ताक्षरित (और डिफ़ॉल्ट, हस्ताक्षरित) होने के साथ एक योग्यता इस प्रकार आप "हस्ताक्षरित int" या "हस्ताक्षरित चार" का उपयोग करने के तरीके में "हस्ताक्षरित int" का उपयोग करना चाहते हैं (और यह स्पष्ट करता है कि आपने केवल int को याद नहीं किया है)। "लंबी int" या "लघु int" में int अनिवार्य है। – Dipstick

+1

@ डिप्स्टिक, "लांग" "int" के लिए एक योग्यता है। लगता है कि "हस्ताक्षरित int" में int की तरह "अनगिनत लंबे int" में int के रूप में उतना ही अनिवार्य है। –

3

सी में और सी ++

unsigned = unsigned int (Integer type) 
signed = signed int (Integer type) 

एक अहस्ताक्षरित पूर्णांक n बिट्स युक्त 0 और (2^n-1) के बीच कोई मान हो सकता है, जो 2^n विभिन्न मूल्यों है।

एक हस्ताक्षरित पूर्णांक या तो सकारात्मक या शून्य है।

साइन किए गए पूर्णांक कंप्यूटर के 2 पूरक के उपयोग से संग्रहीत किए जाते हैं।

0

मेरा answer from another question लाएं।

C specification से

, खंड 6.7.2:

- अहस्ताक्षरित, या अहस्ताक्षरित int

मतलब है कि unsigned, प्रकार निर्दिष्ट नहीं किया जब, unsigned int के लिए डिफ़ॉल्ट जाएगा। तो unsigned a लिखना unsigned int a जैसा ही है।

संबंधित मुद्दे