python 整数越界问题详解

yipeiwu_com5年前Python基础

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)

'''
33
55
[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)

'''
33
44
55
[Finished in 0.1s]
'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python实现对csv文件的列的内容读取

以下代码测试在python2.7 mac上运行成功 import csv with open('/Users/wangzhao/Downloads/test.csv', 'U')...

python中常用检测字符串相关函数汇总

本文实例汇总了python中常用检测字符串相关函数。分享给大家供大家参考。具体分析如下: 下面的python代码可用于检测字符串,包括是否全部为数字,是否包含数字,是否包含标题单词,是否...

Python中使用ConfigParser解析ini配置文件实例

ini文件是windows中经常使用的配置文件,主要的格式为: 复制代码 代码如下: [Section1] option1 : value1 option2 : value2 pyth...

python基于queue和threading实现多线程下载实例

本文实例讲述了python基于queue和threading实现多线程下载的方法,分享给大家供大家参考。具体方法如下: 主代码如下: #download worker qu...

Python中使用Queue和Condition进行线程同步的方法

Queue模块保持线程同步 利用Queue对象先进先出的特性,将每个生产者的数据一次存入队列,而每个消费者将依次从队列中取出数据 import threading # 导入t...