मैं सी में इस कोड है (यह केवल अध्ययन के लिए है):सी छोड़ पारी असफल
char x;
uint64_t total = 0;
for(x = 20; x < 30; x++){
total = (((((1 << x) * x)/64) + 1) * sizeof(uint64_t));
printf("%d - %llu\n", x, total);
}
क्या छपा है:
20 - 2621448
21 - 5505032
22 - 11534344
23 - 24117256
24 - 50331656
25 - 104857608
26 - 218103816
27 - 18446744073625665544
28 - 18446744073575333896
29 - 18446744073508225032
क्यों उन x> 26 मैं क्या ज़रूरत है अजीब मूल्य? मैं उबंटू 10.10 64 बिट्स पर जीसीसी 4.6.1 पर हूं।
लगता है कि समस्या चार एक्स पर है, मैंने इसके लिए uint64_t का उपयोग किया और अच्छा काम करता है। –
यदि आप कुल = ((((1 << x) * x)/64) + 1) * sizeof (uint64_t)); 'कुल =' के लिए सरलीकृत किया गया है, तो आप यह देखने में सक्षम होंगे कि क्या अधिक स्पष्ट हो रहा है ((1 << x) * x); 'फिर' printf ("% d - 0x% llx \ n", x, कुल) के साथ मुद्रित; 'आपको nmber नकारात्मक को बदलने वाला साइन बिट दिखाई देगा, जिसे मुद्रित किया गया है printf द्वारा एक बड़ी संख्या ("... -% llu \ n", ... कुल); – gbulmer