दिलचस्प पोस्ट
पायथन शब्दकोश: क्या चाबियाँ () और मूल्य () हमेशा एक ही क्रम हैं? अहस्ताक्षरित पूर्णांक घटाव परिभाषित व्यवहार है? div ऊर्ध्वाधर संरेखित मध्य सीएसएस "अभिव्यक्ति SFINAE" क्या है? INNER JOIN, LEFT JOIN, सही जुड़ने और पूर्ण जुड़ने के बीच क्या अंतर है? रूबी मेटैक्लास भ्रम सी में बड़ी संख्या के फ़ैक्टोरियल की गणना करना जावास्क्रिप्ट regex में उपयोग के लिए स्ट्रिंग एस्केप हेक्सागोन का उत्तरदायी ग्रिड फ्लेक्स कंटेनरों के घोंसले के शिकार के रूप में फ्लेक्स गुणों का उचित उपयोग दूसरी पत्र में पंक्तियों की संख्या की गणना करें क्या सभी डेटा एक ही आकार में सभी डेटा प्रकारों के लिए एक प्लेटफॉर्म में इंगित करते हैं? एंड्रॉइड एडीटी की स्थापना रद्द करना रैवल्यूज़, लावल्यूस, एक्सवल्यूज, ग्लुवेल और प्रोजेल्स क्या हैं? जावा में शब्दों को संख्या बदलने के लिए कैसे करें

64-बिट विंडोज पर थोड़ी सा आकार क्या है?

बहुत पहले नहीं, किसी ने मुझसे कहा कि 64 बिट मशीनों पर 64 बिट नहीं हैं और मुझे हमेशा int उपयोग करना चाहिए। यह मुझे समझ में नहीं आया मैंने डॉक्स (जैसे ऐप्पल की आधिकारिक साइट पर एक) को देखा है कि 64-बिट CPU के लिए संकलन करते long वास्तव में 64 बिट होते हैं मैंने देखा कि यह 64-बिट विंडोज पर था और पाया गया

  • Windows: long और int 32-बिट लंबाई में रहती है, और विशेष नए डेटा प्रकार 64-बिट पूर्णांक के लिए परिभाषित किए जाते हैं।

( http://www.intel.com/cd/ids/developer/asmo-na/eng/197664.htm?page=2 से )

मुझे क्या इस्तेमाल करना चाहिए? क्या मुझे uw तरह कुछ परिभाषित करना चाहिए, sw ((संयुक्त राष्ट्र) पर हस्ताक्षर किए चौड़ाई) long रूप में यदि Windows पर नहीं, और अन्यथा लक्ष्य सीपीयू बिट्स की जाँच करें?

वेब के समाधान से एकत्रित समाधान "64-बिट विंडोज पर थोड़ी सा आकार क्या है?"

यूनिक्स दुनिया में, 64-बिट प्लेटफार्मों के लिए पूर्णांक और पॉइंटर्स के आकार के लिए कुछ संभव व्यवस्था थी। इन दोनों का व्यापक रूप से इस्तेमाल किया गया था ILP64 (वास्तव में, केवल इस का बहुत कुछ उदाहरण; क्रे एक ऐसा था) और एलपी 64 (लगभग सभी चीजों के लिए) Acronynms 'आंत से आते हैं, लंबे, संकेतक 64-बिट' और 'लंबा, संकेतक 64-बिट' हैं

 Type ILP64 LP64 LLP64 char 8 8 8 short 16 16 16 int 64 32 32 long 64 64 32 long long 64 64 64 pointer 64 64 64 

आईएलपी 64 प्रणाली को एलपी 64 के पक्ष में छोड़ दिया गया था (अर्थात, लगभग सभी बाद के प्रवेशकों ने एस्पेंन समूह की सिफारिशों के आधार पर एलपी 64 का उपयोग किया था, केवल 64-बिट ऑपरेशन की लंबी विरासत वाले सिस्टम को एक अलग योजना का उपयोग किया गया था)। सभी आधुनिक 64-बिट यूनिक्स सिस्टम LP64 का उपयोग करते हैं MacOS X और Linux दोनों आधुनिक 64-बिट सिस्टम हैं

माइक्रोसॉफ्ट 64-बिट के संक्रमण के लिए एक अलग योजना का उपयोग करता है: एलएलपी 64 ('लंबे समय तक, पॉइंटर्स 64-बिट' हैं) इसका अर्थ है कि 32-बिट सॉफ़्टवेयर को बिना बदलाव के पुनः कंपाइल किया जा सकता है। इसमें जो भी हर कोई करता है उससे अलग होने का दोष है, और 64-बिट क्षमताओं का फायदा उठाने के लिए कोड को संशोधित करने की भी आवश्यकता है हमेशा संशोधन आवश्यक था; यह यूनिक्स प्लेटफार्मों पर आवश्यक लोगों से संशोधनों का एक अलग सेट था।

यदि आप अपने सॉफ़्टवेयर को प्लेटफॉर्म-तटस्थ पूर्णांक प्रकार के नामों के आसपास डिज़ाइन करते हैं, तो संभवत: C99 <inttypes.h> हैडर का उपयोग करते हुए, जो कि जब प्लेटफार्म पर प्रकार उपलब्ध होते हैं, हस्ताक्षरित (सूचीबद्ध) और अहस्ताक्षरित (सूचीबद्ध नहीं) के साथ उपसर्ग 'यू'):

  • int8_t – 8-बिट पूर्णांक
  • int16_t – 16-बिट पूर्णांक
  • int32_t – 32-बिट पूर्णांक
  • int64_t – 64-बिट पूर्णांक
  • uintptr_t – संकेतकों को पकड़ने के लिए पर्याप्त पर्याप्त अहस्ताक्षरित पूर्णांक
  • intmax_t – मंच पर पूर्णांक का सबसे बड़ा आकार ( int64_t से बड़ा हो सकता है)

तब आप इन प्रकारों का उपयोग करके अपने आवेदन को कोडित कर सकते हैं जहां यह मायने रखता है, और सिस्टम प्रकारों से सावधान रहना (जो अलग हो सकता है)। वहाँ एक intptr_t प्रकार है – संकेतक धारण करने के लिए एक हस्ताक्षरित पूर्णांक प्रकार; आपको इसका उपयोग न करने की योजना है, या इसे केवल दो uintptr_t मानों ( ptrdiff_t ) के घटाव के परिणाम के रूप में प्रयोग करना चाहिए।

लेकिन, जैसा कि सवाल (अविश्वास में) बताते हैं, 64-बिट मशीनों पर पूर्णांक डेटा प्रकारों के आकार के लिए अलग-अलग सिस्टम हैं इस्की आद्त डाल लो; दुनिया बदलने नहीं जा रही है

यह स्पष्ट नहीं है कि प्रश्न माइक्रोसॉफ्ट सी ++ कंपाइलर या विंडोज एपीआई के बारे में है। हालांकि, कोई [c ++] टैग नहीं है, इसलिए मुझे लगता है कि यह विंडोज़ एपीआई के बारे में है। कुछ उत्तर लिंक रोट से पीड़ित हैं इसलिए मैं एक और लिंक प्रदान कर रहा हूं जो सड़ांध कर सकता है।


INT , LONG आदि जैसी विंडोज़ एपीआई प्रकारों के बारे में जानकारी के लिए एमएसडीएन पर एक पेज है:

Windows डेटा प्रकार

यह जानकारी विभिन्न विंडोज हेडर फाइलों में भी उपलब्ध है जैसे कि WinDef.h । मैंने कुछ प्रासंगिक प्रकार यहां सूचीबद्ध किए हैं:

 प्रकार |  एस / यू |  x86 |  64
 ---------------------------- + ----- + -------- + ------ -
 बाइट, बुलियन |  यू |  8 बिट |  8 बिट
 ---------------------------- + ----- + -------- + ------ -
 लघु |  एस |  16 बिट |  16 बिट
 यूएसहॉर्ट, WORD |  यू |  16 बिट |  16 बिट
 ---------------------------- + ----- + -------- + ------ -
 INT, लांग |  एस |  32 बिट |  32 बिट
 यूआईएनटी, उलॉन्ग, डीडवर्ड्स |  यू |  32 बिट |  32 बिट
 ---------------------------- + ----- + -------- + ------ -
 INT_PTR, LONG_PTR, LPARAM |  एस |  32 बिट |  64 बिट
 UINT_PTR, यूएलओएनजीटीटीआर, वाराम |  यू |  32 बिट |  64 बिट
 ---------------------------- + ----- + -------- + ------ -
 लांग लाँग |  एस |  64 बिट |  64 बिट
 उलॉन्गॉन्ग, QWORD |  यू |  64 बिट |  64 बिट

स्तंभ "एस / यू" हस्ताक्षरित / अहस्ताक्षरित दर्शाता है

एमएसडीएन पर यह आलेख कई प्रकार के उपनामों (विंडोज पर उपलब्ध) का संदर्भ देता है जो उनकी चौड़ाई के संबंध में थोड़ा अधिक स्पष्ट हैं:

http://msdn.microsoft.com/en-us/library/aa505945.aspx

उदाहरण के लिए, यद्यपि आप 64-बिट अहस्ताक्षरित अभिन्न मूल्य का संदर्भ देने के लिए ULONGLONG का उपयोग कर सकते हैं, आप यूआईएनटी 64 भी उपयोग कर सकते हैं। (ये भी यूलोन्ग और यूआईएनटी 32 के लिए जाता है।) शायद यह थोड़ा स्पष्ट होगा?

माइक्रोसॉफ्ट ने भी ऐसे पूर्णांक के लिए UINT_PTR और INT_PTR परिभाषित किया है जो सूचक के समान आकार हैं।

यहां माइक्रोसॉफ्ट के विशिष्ट प्रकार की एक सूची है – यह उनके ड्राइवर संदर्भ का हिस्सा है, लेकिन मेरा मानना ​​है कि यह सामान्य प्रोग्रामिंग के लिए भी मान्य है।

अपने संकलक / प्लेटफ़ॉर्म के लिए यह जानने का सबसे आसान तरीका:

 #include <iostream> int main() { std::cout << sizeof(long)*8 << std::endl; } 

8 का प्रयोग करके बाइट्स से बिट्स प्राप्त करना है।

जब आपको किसी विशेष आकार की आवश्यकता होती है, तो किसी एक पूर्वनिर्धारित प्रकार के लाइब्रेरी का उपयोग करने में अक्सर आसान होता है। यदि यह अवांछनीय है, तो आप जो अक्सर ऑटोकॉन्फ़ सॉफ़्टवेयर के साथ हो सकते हैं और कॉन्फ़िगरेशन सिस्टम को आवश्यक आकार के लिए सही प्रकार निर्धारित कर सकते हैं।

यदि आपको कुछ लम्बाई के पूर्णांक का उपयोग करने की आवश्यकता है, तो आपको शायद आपकी मदद करने के लिए कुछ प्लेटफ़ॉर्म स्वतंत्र हेडर का उपयोग करना चाहिए बूस्ट को देखने के लिए एक अच्छी जगह है।