2011-08-11 6 views
7

मैं अपने अध्ययन के दौरान एक बहुत ही सरल कार्यक्रम में '< <', & ओवरलोड तैयार कर रही थी, मैं अपने कार्यक्रम के निम्नलिखित आश्चर्य की बात उत्पादन पाया।अधिक भार inserters और अजीब निर्गम ('20' और '020' के लिए)

#include<iostream> 
#include<conio.h> 
#include<string> 

using namespace std; 

class student 
{ 

int age; 

public: 
student(){} 
student(int a){age=a;} 

friend ostream &operator<<(ostream &stream,student o); 
}; 

/*operator overloaded in this block*/ 
ostream &operator<<(ostream &stream,student o) 
{ 
stream<<o.age; 
return stream; 
} 

int main() 
{ 
student ob1(20),ob2(020); 
cout<<ob1; /*will yield 20(as desired)*/ 
cout<<"\n"<<ob2;  /*yielding 16(why so)*/ 
    _getch(); 
return 0; 
} 

किसी भी explainations कृपया

+2

0x20 के साथ भी प्रयास करें। आप आश्चर्यचकित होंगे। – Tom

+0

HAHA ..... या मैं था ... बीटी पॉइंट एनड – nobalG

+0

कॉन्स संदर्भ द्वारा छात्र पास करें। अन्यथा जब आप इसे फ़ंक्शन में पास करते हैं तो आप प्रतिलिपि बना रहे हैं। 'ओस्ट्रीम और ऑपरेटर << (ओस्ट्रीम और स्ट्रीम, छात्र ** कॉन्स और ** ओ) ' –

उत्तर

11

0 सी ++ पूर्णांक शाब्दिक के लिए अष्टाधारी उपसर्ग और अष्टाधारी में 20 है दशमलव में 16 है।

आगे की व्याख्या करने के लिए: यदि 0 के साथ एक शाब्दिक प्रारंभ होता है तो बाकी संख्या को अंडाकार प्रतिनिधित्व में व्याख्या किया जाएगा। आपके उदाहरण में 2 * 8^1 + 0 * 8^0।

पूर्णांक ड्राफ्ट के लिए वाक्यविन्यास §2.14.2 में हाल के मानक मसौदे में दिया गया है।

5
student ob1(20),ob2(020); 

आप 020 जो C और C++ में एक अष्टाधारी संख्या (आधार 8) शुरू में शून्य के कारण के रूप में व्याख्या की है लिखा है। तो 020 में दशमलव में मान 16 है।

3

आप इस सवाल का जवाब यहाँ मिलेगा:

How does C Handle Integer Literals with Leading Zeros, and What About atoi?

आप एक शून्य के साथ शाब्दिक पहले से जुड़ा हुआ है, संख्या के इलाज के रूप में अष्टाधारी और 20oct है 16dec जिसका मतलब है।

2

020ऑक्टल में 20 है, जैसे 0x20 हेक्स में 20 है। पिछले 0 को हटाएं और इसे काम करना चाहिए।

1

प्रमुख 0 है कि यह किसी ऑक्टल संख्या (आधार 8) तो 20 अष्टाधारी में है 16.

1

यह एक अष्टाधारी के रूप में 020 interpereting है निर्दिष्ट करता है। 2 * 8 = 16। इसे 3 पर स्विच करने का प्रयास करें, यह 030 के लिए 24 दिखाएगा। यदि आप 0x20 डालते हैं तो यह 32 को इसके हेक्साडेसिमल के रूप में ले जाएगा। :)

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