2011-02-18 7 views
6

यह प्रोग्राम एक विंडोजएक्सपी मशीन पर वीसी ++ 6.0 में लिखा गया है।मैं सीधे __int64 चर -2500000000 पर क्यों सेट नहीं कर सकता?

यदि मैं सीधे __int64 चर -2500000000 पर सेट करने का प्रयास करता हूं, तो इसे 32 बिट मान पर छोटा कर दिया जाता है और दोनों का पूरक लिया जाता है।

__int64 testval; 
testval = -2500000000; 

इस बिंदु testval पर 1794967293 (110 1010 1111 1101 0000 0111 0000 0000 बाइनरी) के बराबर होती है।

मैं नकारात्मक एक से गुणा +२५०००००००० को चर सेट और फिर करते हैं, यह काम करता है:

__int64 testval; 
testval = 2500000000; 
testval *= -1; 

चर testval -2500000000 (1001 0101 0000 0010 1111 1001 0000 0000 बाइनरी) के बराबर होती है।

कोई विचार? धन्यवाद।

+3

एमएसवीसी 6? आउच! उससे ठेस पहुँचती है! –

उत्तर

10

एक नया कंपाइलर प्राप्त करें। वीसी 6 मानक अनुपालन बहुत खराब है।

VC6 में, में

__int64 toobig = -2500000000i64; 

मिले the documentation के रूप में, i64 के प्रत्यय की कोशिश करो!

+0

धन्यवाद, यह पसंदीदा तरीका होगा, लेकिन फिलहाल यह एक विकल्प नहीं है। –

+0

@E: मुझे लगता है कि मेरे पास वीसी 6 का समाधान है, लेकिन अब मेरे पास एक प्रति इंस्टॉल नहीं है जहां मैं इसका परीक्षण कर सकता हूं। –

+0

यह काम करता है। धन्यवाद! इसे __int64 के लिए उनके दस्तावेज़ में लिंक करने की आवश्यकता है। –

9

कंपाइलर 32-बिट संख्या के रूप में निरंतर 2500000000 का इलाज कर रहा है। स्थिरता के अंत में LL को जोड़कर आपको long int के रूप में इसका इलाज करने के लिए इसे स्पष्ट रूप से बताने की आवश्यकता है। तो, ऐसा करें:

testval = -2500000000LL;

अद्यतन: चूंकि आपके संकलक इस का समर्थन नहीं करता है, और आप VC6 साथ फंस रहे हैं, कि के रूप में दो 32 बिट संख्याओं का गुणनफल का परिणाम है एक मूल्य में तोड़ने के बजाय कोशिश इन:

testval = -250000; 
testval *= 10000;
+1

संभवतः 'एल' –

+0

की बजाय 'एलएल' बनाने के लिए सुरक्षित है कि (उस शाब्दिक के लिए 32-बिट प्रकार का उपयोग करने वाला संकलक) सी ++ 0x सेक्शन' [lex.icon] 'का उल्लंघन है ... किसी के पास है सी ++ 03 या सी ++ 98 से शब्द? –

+2

सी ++ 03 शायद 90 के उत्तरार्ध में दिखाई देने वाले विज़ुअल सी ++ 6 पर विचार करने में बहुत मदद नहीं करेगा। – ChrisV

2

सही वाक्यविन्यास -2500000000LL है। यदि यह काम नहीं करता है, तो एक नया संकलक प्राप्त करें।

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