In C, lungo è 64 bit su un sistema a 64 bit. Questo si riflette nel modulo ctypes di Python?Python è ctypes.c_long a 64 bit su sistemi a 64 bit?
risposta
La dimensione di long
depends on the memory model. Su Windows (LLP64) è a 32 bit, su UNIX (LP64) è a 64 bit.
Se è necessario un numero intero a 64 bit, utilizzare c_int64
.
Se è necessario un numero intero con puntatore, utilizzare c_void_p
("Il valore è rappresentato come numero intero").
Sì.
>>> ctypes.c_long(2**50)
c_long(1125899906842624)
>>> ctypes.c_long(2**64)
c_long(0)
>>> ctypes.c_long(2**63)
c_long(-9223372036854775808)
Suppongo che tu stia eseguendo questo da un sistema operativo LP64, ma le altre risposte in realtà mi hanno detto quando e perché :) –
Attualmente n.
Su un sistema Windows a 64 bit, lungo è 32 bit.
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)
>>>
Bel lavoro calpestando la mia ipotesi che Windows 64x fosse a 64 bit. –
Se un C long
è a 64 bit (come è il LP64 e ILP64 sistemi, praticamente qualsiasi sistema a 64 bit diverso da Windows), allora lo è anche ctypes.c_long
. Se un C lungo non è a 64 bit (come nei sistemi LLP64 come Windows a 64 bit), non lo è neanche uno ctypes.c_long
.
Oh wow, collegamento fantastico, non ho mai saputo che il modello di memoria fosse stato formalizzato. –