首页 > 编程 > Python > 正文

python 整数越界问题详解

2019-11-25 12:36:28
字体:
来源:转载
供稿:网友

python 内部自带大整数运算能力,整数运算不会溢出,只要内存足够,就oK

下面的例子演示了两个32位整数加法的情况(通过位运算实现),为了模拟溢出的效果,必须人工的进行位运算,~运算符除了求反,还是二进制的补运算符,运算过后的二进制数字按照补码解释,例如 ~(0011 1100) = (1100 0011) = -61

def getSum(a, b):    """    :type a: int    :type b: int    :rtype: int    """    MAX = 0X7fffffff    MIN = 0X80000000    while b != 0 :     a,b = a^b,(a&b)<<1     print(" a = {0:b},b = {1:b}".format(a,b))    return a def getSum_(a, b):    """    :type a: int    :type b: int    :rtype: int    """    MAX = 0x7FFFFFFF    MIN = 0x80000000    mask = 0xFFFFFFFF    while b != 0:      a, b = (a ^ b) & mask, ((a & b) << 1) & mask      print(type(a))      print(" a = {0:b},b = {1:b}".format(a,b))    return a if a <= MAX else ~(a^mask)   print(getSum_(-1,-1))print(getSum(-1,1))

补充:python 循环内部添加多个条件判断会出现越界

1.循环遍历数组是,想添加条件修改时,只删除第一个

# -*- coding: utf-8 -*-a=[11,22,33,44,55]for i in a:  if i == 11 or i ==22:    a.remove(i)for i in a:  print(i)'''3355[Finished in 0.1s]'''

2.应该引入被删除为一个数组

# -*- coding: utf-8 -*-a=[11,22,33,44,55]b=[]for i in a:  if i == 11 or i ==22:    b.append(i)for i in b:  a.remove(i)for i in a:  print(i)'''334455[Finished in 0.1s]'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表