gpt4 book ai didi

cross-platform - 如何在 Ada 中对 mod 类型执行二进制加法?

转载 作者:行者123 更新时间:2023-12-04 04:31:12 25 4
gpt4 key购买 nike

这里非常具体的问题......不,这不是家庭作业(离开那么远......远远落后)。基本上我需要为写入 EPROM 的代码计算校验和,并且我想在 Ada 程序中编写这个函数来练习我在语言中的位操作。

我正在更改 EPROM 的固件数据文件的一部分,并且该更改最后需要一个新的有效校验和,因此生成的系统将接受更改后的代码。该校验和首先对其覆盖的所有数据进行模 256 二进制求和,然后执行其他更高级别的操作以获得校验和,我不会在这里讨论。

那么现在如何对 mod 类型进行二进制加法呢?

我假设如果我在 mod 类型上使用“+”运算符,它将像整数值运算一样求和……这是我不想要的结果。我真的被这个难住了。如果我不需要的话,我不想真正做一个打包的数组并执行位进位,特别是如果这被认为是“老帽子”。我正在阅读的引用资料声称,在处理二进制操作时,您需要使用 mod 类型来确保代码的可移植性更高。如果可能的话,我想试试。我正在尝试使用该程序针对多个平台,因此我正在寻找可移植性。

谁能建议我如何对 mod 类型执行二进制加法?

该语言中的任何起点都会有很大帮助。

最佳答案

只需使用 modular type , 运算符对其进行无符号算术运算。

type Word is mod 2 ** 16; for Word'Size use 16;

附录:对于模块化类型,预定义的 logical operators逐位操作。此外,“ binary adding operators + and – 如果结果超出类型的基本范围,则模块化类型包括一个以模数为模的最终归约。” function Update_Crc 是一个例子。

附录: §3.5.4 Integer Types, ¶19注意到对于模块化类型, predefined operators 的结果以模数为模减少,包括 binary adding operators + and – .此外, §B.2 The Package Interfaces 中的移位函数可用于模块化类型。总之,算术、逻辑和移位功能足以满足大多数按位运算。

关于cross-platform - 如何在 Ada 中对 mod 类型执行二进制加法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5915910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com