当前位置: 首页 > 面试题库 >

在Python中模拟整数溢出

尚阳炎
2023-03-14
问题内容

Python 2有两个整数数据类型intlong,并在必要时自动在它们之间进行转换,尤其是为了避免整数溢出。

我正在Python中模拟C函数,并且想知道是否存在重新启用整数溢出的标准方法。对于随机数,我已经使用

overflow_point = maxint + 1
if value > overflow_point:
    value -= 2 * overflow_point

有没有更标准的方式来做同样的事情?


问题答案:

我认为基本思路是合理的,但需要进行一些调整:

  1. 您的函数不会在上溢出sys.maxint+1,但是应该;
  2. sys.maxint 一次操作可以超过几次;
  3. -sys.maxint-1还需要考虑以下负值。

考虑到这一点,我提出了以下建议:

import sys

def int_overflow(val):
  if not -sys.maxint-1 <= val <= sys.maxint:
    val = (val + (sys.maxint + 1)) % (2 * (sys.maxint + 1)) - sys.maxint - 1
  return val


 类似资料:
  • 我在一次采访中被问及这一点。我被要求计算数字x1,x2,x3,…的平均值,。。。xn公司 //所以归结起来是这样的: 面试官说列表的大小是未知的,它可能很大,所以总和可能会溢出。他问我如何解决溢出问题,我的回答是跟踪我们可能超过最大数量的次数等等,他说了一些关于推入堆栈、平均值和长度的事情,我从来没有真正理解他的解决方案,将这两个变量推入某种列表中?有人知道吗?

  • 虚拟机安装:Ubuntu 12.04(x86) 什么是整数溢出? 存储大于最大支持值的值称为整数溢出。整数溢出本身不会导致任意代码执行,但整数溢出可能会导致堆栈溢出或堆溢出,这可能导致任意代码执行。在这篇文章中,我将仅谈论整数溢出导致堆栈溢出,整数溢出导致堆溢出将在后面的单独的帖子中讨论。 数据类型大小及范围: 当我们试图存储一个大于最大支持值的值时,我们的值会被包装 。例如,当我们尝试将存储到带

  • 问题内容: 我正在尝试近两个小时,没有任何运气。 我有一个看起来像这样的模块: 稍后在代码中: 有任何想法吗? 编辑: 亚历克斯的建议似乎无效: 运行测试时: 但是,当我从python交互式控制台运行相同的代码时,它 确实 起作用。 更多编辑: 我正在使用一个测试文件,该文件具有特定于我模块这一部分的所有测试。首先,我导入可用的模块,以演示和测试常用用法。缺少软件包被认为是一种极端情况,因此我稍后

  • 本文向大家介绍C#整数溢出,包括了C#整数溢出的使用技巧和注意事项,需要的朋友参考一下 示例 整数可以存储的最大容量。而当您超过该限制时,它将循环回到负面。对于int,它是2147483647 对于超出此范围的所有整数,请使用System.Numerics数据类型为BigInteger的名称空间。检查下面的链接以获取更多信息https://msdn.microsoft.com/zh-cn/libr

  • 问题内容: 有了这段代码,我得到了这个答案。为什么我得到负值? 问题答案: 在您的平台上,np.arange返回dtype’int32’的数组: 数组的每个元素都是32位整数。平方导致结果不适合32位。结果被裁剪为32位,并且仍然解释为32位整数,这就是为什么看到负数的原因。 编辑: 在这种情况下,可以通过在平方之前构造dtype’int64’数组来避免整数溢出: 请注意,使用numpy时,发现的

  • 问题内容: 在处理Swift时,我注意到当64位整数溢出时,出现以下错误: file:///Users/user/Documents/playground/MyPlayground.playground/:错误:操场执行中止:执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)。 第一次调用(即使用92作为参数)将运行良好。但是,当提供