永发信息网

Python中的sys.maxint是跟操作系统有关系,还是python平台有关?我同时转了32和64的,但是这个值是一样大

答案:3  悬赏:50  手机版
解决时间 2021-11-29 05:23
  • 提问者网友:藍了天白赴美
  • 2021-11-28 17:25
Python中的sys.maxint是跟操作系统有关系,还是python平台有关?我同时转了32和64的,但是这个值是一样大
最佳答案
  • 五星知识达人网友:琴狂剑也妄
  • 2021-11-28 18:41
这是python int类型支持的最大值, 同操作系统没有直接关系。

见Python源码的Misc/History:
sys.maxint is the
largest Python int, which is actually a C long

如果这句话属实, 它是由当前编译环境的"long"类型所决定的。 而在64位系统下, C的sizeof(long)通常也是4, 所以sys.maxint同32位下相同。追问你的说法我同意,“Plain integers (also just called integers) are implemented using long in C",Python中的int是基于C的long int 实现。但是C的long int 也就是32,所以sys.maxint跟解析器位数和操作系统位数都没关系追答没错,确认要看代码以及编译环境对long的处理。从公开的信息看,同操作系统没有直接关系。

maxint大致是在这里(匆匆看了一下,没有认真看,未免错漏楼主可以去代码中确认):

SET_SYS_FROM_STRING("maxint",
PyInt_FromLong(PyInt_GetMax()));

宏定义在同一文件内。

函数
long
PyInt_GetMax(void)
{
return LONG_MAX;
}

LONG_MAX:

#ifndef LONG_MAX
#if SIZEOF_LONG == 4
#define LONG_MAX 0x7FFFFFFFL
#elif SIZEOF_LONG == 8
#define LONG_MAX 0x7FFFFFFFFFFFFFFFL
#else
#error "could not set LONG_MAX in pyport.h"
#endif
#endif

SIZEOF_LONG多处定义,如:
ifdef MS_WIN32
。。。
#define SIZEOF_LONG 4 #注意这里

mac:
# ifdef __LP64__
...
# define SIZEOF_LONG 8
...
#else
# define SIZEOF_LONG 4
全部回答
  • 1楼网友:怙棘
  • 2021-11-28 19:54
跟操作系统有关系
  • 2楼网友:孤独的牧羊人
  • 2021-11-28 19:46
如果操作系统是32位的,那么sys.maxint一定是32位的long长度,大约是2开头的一个相当于2GB。2147483648L

如果操作系统是64位的,同时你安装的python也是64位编译的。那么maxint应该是9223372036854775808L

你自己试验一下就知道了。追问

我的电脑上同时都安装了32位是64为的python,而且我的操作系统也是64位的,但是结果并非你说的那样,见图片

追答

也许是这样。原理上应该是我这样的。我在linux上试了一下。(因为我自己windows上用的是32位)



关键在于编译python时使用的是多少位。也可能存在假的64位。原则上讲,只要是64位。long型绝对是64位。甚至int型都可能是64位。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯