2010-07-21 10 views
6

मुझे एक छोटी सी समस्या है। अनिवार्य रूप से, कोड:uint64_t की क्षमता?

uint64_t myInteger = 98930 * 98930; 
NSLog(@"%qu", myInteger); 

... बस यह गलत हो जाता है। मुझे आउटपुट के रूप में '1197210308' मिलता है, जो स्पष्ट रूप से गलत है। ये क्यों हो रहा है? ऐसा नहीं हो सकता है कि uint64_t बहुत छोटा है, क्योंकि वे स्पष्ट रूप से 18 and a half quintillion तक जाते हैं। किसी को भी कोई विचार है?

उत्तर

9

कास्टिंग पहले नंबर तो आपरेशन कि प्रकार का उपयोग किया जाता है का प्रयास करें:

uint64_t myInteger = (uint64_t)98930 *98930; 
+6

या: 'uint64_t myInteger = 98930UL * 98930UL; ' –

+0

यही है। यह अब काम करता है। धन्यवाद! –

+0

या इससे भी बेहतर: UINT64_C (98 9 30) * UINT64_C (98 9 30) – nall

2

मैं उद्देश्य सी के बारे में ज्यादा पता नहीं है, लेकिन सी में एक ही कर रही है, पूर्णांक प्रोन्नति पूर्णांक पद पर रोक , तो आप एक पूर्णांक ओवरफ्लो प्राप्त करते हैं। प्रयास करें:

uint64_t myInteger = 98930LLU * 98930; 
8

98930 एक int है, तो आप दो int रों है, जो एक int देता गुणा कर रहे हैं। फिर आप uint64_t पर असाइन कर रहे हैं, लेकिन यह बहुत देर हो चुकी है, आप पहले से ही सटीकता खो चुके हैं। सुनिश्चित करें कि ऑपरेटरों में से एक uint64_t प्रकार है, इसलिए दूसरे को उस प्रकार से जोड़ा जाएगा, और गुणा uint64_t गुणा के रूप में किया जाएगा।

+0

यह अच्छी तरह से बताता है, धन्यवाद! –

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