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

Jos*_*osh 4 cross-platform bit-manipulation ada

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

我正在更改EPROM的固件数据文件的一部分,并且该更改需要在结尾处使用新的有效校验和,因此生成的系统将接受更改的代码.这个校验和的开始是对它所覆盖的所有数据进行模256的二进制求和,然后进行其他更高级别的操作以获得我不会在这里进行的校验和.

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

我假设如果我在mod类型上使用"+"运算符,它将被总结为整数值运算...我不想要的结果.我真的很难过这个.如果我不需要,我不想真正做一个打包数组并执行比特携带,特别是如果那被认为是"老帽子".我正在阅读的参考文献声称,在处理二进制操作时,您需要使用mod类型来确保更可移植的代码.如果可能,我想尝试一下.我正在尝试使用此程序来定位多个平台,因此可移植性是我正在寻找的.

任何人都可以建议我如何在mod类型上执行二进制加法?

语言中的任何起始位置都会有很大帮助.

tra*_*god 5

只需使用模块类型,运算符为其执行无符号算术.

type Word is mod 2 ** 16; for Word'Size use 16;
Run Code Online (Sandbox Code Playgroud)

附录:对于模块化类型,预定义的逻辑运算符逐位运行.此外," 二进制加法运算符+和 -在模块类型上包括最终减少模数,如果结果超出类型的基本范围." 这function Update_Crc是一个例子.

附录:§3.5.4整数类型,19注意到对于模块类型,预定义运算符的结果以模数减小,包括二进制加法运算符+和 -.此外,§B.2中的移位功能包接口可用于模块化类型.总之,算术,逻辑和移位功能足以满足大多数按位操作.