2010-07-24 5 views

उत्तर

10

longdepends on the memory model का आकार। विंडोज (एलएलपी 64) पर यह 32-बिट है, यूनिक्स (एलपी 64) पर यह 64-बिट है।

यदि आपको 64-बिट पूर्णांक की आवश्यकता है, तो c_int64 का उपयोग करें।

यदि आपको पॉइंटर आकार के पूर्णांक की आवश्यकता है, तो c_void_p का उपयोग करें ("मान पूर्णांक के रूप में दर्शाया गया है")।

+0

ओह वाह, शानदार लिंक, मुझे कभी नहीं पता था कि स्मृति मॉडल औपचारिक रूप से लागू किया गया था। –

1

हां।

>>> ctypes.c_long(2**50) 
c_long(1125899906842624) 
>>> ctypes.c_long(2**64) 
c_long(0) 
>>> ctypes.c_long(2**63) 
c_long(-9223372036854775808) 
+0

मुझे लगता है कि आप इसे एलपी 64 ओएस से चला रहे हैं, लेकिन अन्य उत्तरों ने वास्तव में मुझे बताया कि क्यों और क्यों :) –

4

असल में नहीं।

विंडोज 64-बिट सिस्टम पर, 32 बिट्स लंबा है।

Python 3.1.2 (r312:79149, Mar 20 2010, 22:55:39) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import ctypes 
>>> ctypes.c_long(2**31) 
c_long(-2147483648) 
>>> ctypes.c_long(2**31+1) 
c_long(-2147483647) 
>>> ctypes.c_long(2**31-1) 
c_long(2147483647) 
>>> 

What is the bit size of long on 64-bit Windows?

+0

अच्छा काम मेरी धारणा को रोक रहा है कि विंडोज -64x 64 बिट था। –

2

देखें एक सी long 64-बिट है, तो इसलिए ctypes.c_long है (जैसे कि यह काफी किसी भी 64-बिट Windows के अलावा अन्य प्रणाली LP64 और ILP64 सिस्टम पर है,)। यदि सी सी 64-बिट नहीं है (जैसे कि 64-बिट विंडोज़ जैसे एलएलपी 64 सिस्टम पर) तो ctypes.c_long या तो नहीं है।

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