不带进位标志的大整数加法

2024-01-03

在汇编语言中,通常有一条指令将两个操作数和一个进位相加。如果要实现大整数加法,只需将不带进位的最低整数与带进位的下一个整数相加即可。在无法访问进位标志的 C 或 C++ 中,如何有效地做到这一点?它应该适用于多个编译器和体系结构,因此我不能简单地使用内联汇编等。


您可以使用“钉子”(GMP 中的术语):而不是使用 a 的所有 64 位uint64_t表示数字时,仅使用其中的 63 个,其中最高位为零。这样您就可以通过简单的位移来检测溢出。您甚至可能想要少于 63。

或者,您可以进行半字算术。如果您可以进行 64 位算术,请将您的数字表示为数组uint32_ts(或者等效地,将 64 位字拆分为上部和下部 32 位块)。然后,在对这些 32 位整数进行算术运算时,可以先提升到 64 位进行算术运算,然后再转换回来。这可以让你检测进位,如果你没有“multiply hi”指令,它也有利于乘法。

正如另一个答案所示,您可以通过以下方式检测无符号加法中的溢出:

uint64_t sum = a + b;
uint64_t carry = sum < a;

顺便说一句,虽然实际上这也适用于有符号算术,但您有两个问题:

  • 更复杂
  • 从技术上讲,溢出有符号整数是未定义的行为

所以你通常最好坚持使用无符号数字。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不带进位标志的大整数加法 的相关文章

  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn

随机推荐

  • 对于自定义错误,我应该使用什么 HTTP 状态代码?

    我需要返回有关错误的信息 例如 客户的联系人不能超过 3 个 作业字段为空 超出操作限制 我需要发送带有自己的状态代码的每个错误吗 我可以用吗400 BadRequest对于所有这些错误 我可以使用 400 BadRequest 来处理所有
  • Tensorflow 无法预测足够准确的结果

    我对我在 Tensorflow 项目中选择的算法有一些基本问题 我输入了大约 100 万组训练数据 但仍然无法获得足够准确的预测结果 我使用的代码基于旧的 Tensorflow 示例 https github com tensorflow
  • 学习 Delphi 最简单/最有效的方法是什么?

    我对编程完全陌生 我选择 Delphi 作为我想学习的编程语言 我基本上想构建使用套接字填写和提交 Web 表单的工具 并且我希望它们也是多线程的 我希望它们功能丰富并且性能正确 我并不急于这样做 因为我确实知道任何事情 尤其是编程 都需要
  • 持续集成工具

    我正在研究持续集成工具及其好处 对于我的研究 我正在研究以下工具 亚搏体育appGitLab持续集成 Jenkins Bamboo GoCD TeamCity 现在我不会打扰你所有的要求和好处 但到目前为止 除了这些之外 我还没有发现这些工
  • 如何在文本输入中插入很棒的字体图标? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 如何将日历网络字体图标插入我的输入字段 HTML
  • SICP 第 3.1.1 节 - 程序中的本地状态似乎不一致

    我正在努力完成 SICP 我在第3 1 1节 http mitpress mit edu sicp full text book book Z H 20 html并查看当地状态 我正在 GNU Guile v2 0 11 中评估这些练习 我
  • IIS:如何获取元数据库路径?

    我正在尝试获取 IIS 服务器已知的 MIME 类型列表 你可以看到我在两年前问过并回答过这个问题 https stackoverflow com questions 174888 asp net iis6 how to search th
  • ASP.NET 会员密码过期

    我正在使用 ASP NET 成员资格来验证我的 Web 应用程序 这对我来说非常有用 我现在必须实现密码过期 如果密码已过期 用户应被重定向到ChangePassword屏幕 并且在不更改密码的情况下不应允许访问应用程序的任何其他部分 有很
  • 为什么 Visual Studio 2010“请求数据”?

    当我切换到 VS2010 中的 ASP NET 设计器时 我遇到了一个奇怪的问题 它不会每次都发生 但一旦发生 它每次都会持续 直到我重新启动 基本上 当我单击 设计 按钮 选项卡从 HTML 切换到设计器时 状态栏中会出现文本 请求数据
  • 将 IISExpress 绑定到 IP 地址失败

    我已经在 Win8 Win8 1 和 Win10 的同一个 Windows 机器上运行了此功能 昨天我执行了 Windows 10 的 Threshold 2 升级 现在我无法在 IISExpress 中启动我的 API 绑定设置如下
  • Emacs 全局设置键到 C-TAB

    我正在尝试在 Emacs 中设置 Ctrl TAB 的键绑定 我使用了以下调用 global set key read kbd macro C TAB my func 然而 每当我使用它时 我都会得到一个
  • 求出小于某个数的 2 次方最快的方法是什么?

    我正在使用这个逻辑 while chase lt lt n lt num where chase 1 n 0最初和num是我想要找到略小于它的 2 次幂的值 循环之后我只需应用 chase 1 chase lt lt n 1 尽管我得到了正
  • 在没有模式的情况下从 xml 创建 Jaxb 类

    如何创建一个简单的 jaxb Java 类来表示以下 xml
  • pycurl install :( 已经有最低的 libcurl 版本

    我在 Intel Mac OS X 10 5 上运行 python 2 6 我正在尝试安装 pycurl 7 16 2 1 按照此处的推荐http curl haxx se mail curlpython 2009 03 0009 html
  • 从另一个文件连接reactjs组件

    我使用 Rails 和 React 开发测试项目 我有来自反应的根组件 chat app js jsx coffee jsx React DOM ChatApp React createClass displayName chatApp r
  • 如何以优雅的方式在多个项目中重用猫鼬模型

    假设我有 3 个 node js 项目 1 个应用程序后端 1 个应用程序管理后端 1 个分析 api 在每个项目中 我都有一个模型架构调用贷款 attributes userId type String required true ind
  • angularjs - 使用 ng-options 添加多个硬编码选项以选择框

    我有一个填充了的选择框ng options 我知道您可以手动添加默认选项 如下所示
  • Jquery UI 可排序,自动移动项目

    我有两个可排序的链表 分别称为列表 1 和列表 2 列表 1 是用户可以选择的所有可能项目的列表 他将它们拖到列表 2 的购物篮中 我想做的是在列表 2 购物篮 中的每个项目旁边有一个按钮 或链接 单击该按钮时会将项目移回列表 1 而用户实
  • 应用程序分析/性能测试

    注 我想在android上测试一下 Hi 我有一个 React Native 的应用程序和一个用 Flutter 制作的类似应用程序 我想分析 测试它并查看 CPU 使用情况 检查它们何时丢帧等 我知道处于调试模式的应用程序性能较差 所以我
  • 不带进位标志的大整数加法

    在汇编语言中 通常有一条指令将两个操作数和一个进位相加 如果要实现大整数加法 只需将不带进位的最低整数与带进位的下一个整数相加即可 在无法访问进位标志的 C 或 C 中 如何有效地做到这一点 它应该适用于多个编译器和体系结构 因此我不能简单