加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python解释器如何将int转换为long?

发布时间:2020-12-20 11:26:20 所属栏目:Python 来源:网络整理
导读:将int转换为long时会发生什么? 例如: a = sys.maxint-1a = a+2 在a = a 2的陈述中发生了什么? Python解释器如何处理溢出? 解决方法 让 read the source(我的机器上有python2.7.3): 这是添加的地方(据我所知): static PyObject *int_add(PyIntObject *v
将int转换为long时会发生什么?

例如:

a = sys.maxint-1
a = a+2

在a = a 2的陈述中发生了什么?

Python解释器如何处理溢出?

解决方法

让 read the source(我的机器上有python2.7.3):

这是添加的地方(据我所知):

static PyObject *
int_add(PyIntObject *v,PyIntObject *w)
{
    register long a,b,x;
    CONVERT_TO_LONG(v,a);
    CONVERT_TO_LONG(w,b);
    /* casts in the line below avoid undefined behaviour on overflow */
    x = (long)((unsigned long)a + b);
    if ((x^a) >= 0 || (x^b) >= 0)
        return PyInt_FromLong(x);
    return PyLong_Type.tp_as_number->nb_add((PyObject *)v,(PyObject *)w);
}

到目前为止,还不错 – 我们从CONVERT_TO_LONG宏中的python整数类型中获取C long类型.然后他们做了一个补充.注意他们如何通过强制转换各种long来获取一些有趣的技巧来检测溢出.*如果没有检测到溢出,它们将C long转换回python对象并返回它.如果有溢出,你可以看到他们再次尝试添加 – 这次,使用python long类型(PyLong_Type).

如果你看一下int_sub,你会发现它几乎是一回事(检测下溢的位技巧略有不同). int_mul似乎有点复杂,并带有一个很好的大块评论.实际上,代码中充满了关于它们如何处理不同情况下的溢出/下溢的注释.这是非常有用的信息.

>我现在有点太累了解决它,但如果你这样做,可以随意发表评论(或者只是编辑).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读