对 2 个整数及其字节执行 add、sub、mul、div、mod 等操作
Posted
技术标签:
【中文标题】对 2 个整数及其字节执行 add、sub、mul、div、mod 等操作【英文标题】:Perform Operations like add, sub, mul, div, mod on 2 integers with their bytes 【发布时间】:2022-01-14 00:56:34 【问题描述】:我有 2 个整数的字节(比如 32 位整数)现在可以使用字节添加它们吗?
我喜欢
char b1[4], b2[4];
int a= 2311;
int b= 233134;
memcpy(b1, &a, 4);
memcpy(b2, &b, 4);
我的问题是有什么算法可以从字节中添加、mul、sub 数字,数字的字节数不固定,可能是 32 位、64 位、128 位。
注意,我不想要任何库或框架,只需要 c++
【问题讨论】:
我也想知道你提出这个问题的原因。仅仅是好奇吗?很好,但请在问题本身中说明。否则,您需要解决的实际潜在问题是什么?为什么你认为你问的解决方案会很好?如果存在潜在问题,那么您的问题(以当前形式)是XY problem。 @Someprogrammerdude 并没有太大的铺设问题。刚学低级编程,很好奇这些事情是怎么做的。 一般来说,答案是“否”。问题是字节顺序。进位必然从最不重要传播到最重要。因此,除非您知道字节顺序,否则无法正确处理进位。 那么你需要做的就是小学时期的加法。其他三个操作也是如此。 “简单”解决方案:转换回纯int
值... ;)
【参考方案1】:
您的问题本质上不是关于 C++ 中的实现,而是关于进行简单算术的算法。
对于您提到的所有操作,请记住您在小学时是如何做的。应用该算法,用字节替换单个十进制数字。原理保持不变。都是数学。
您需要考虑如何检测字节之间的进位和借位。
因为您提到int
作为数据类型,所以您需要考虑符号。如果这些值是无符号的,那就更容易了。
【讨论】:
你能举个例子来说明如何去做吗?特别适用于带字节的 mul 和 div 还有一些管理溢出的方法 不,我没时间做这个了。特别是乘法和除法需要加减法。 SO 不是代码编写服务。您可以从实现无符号值的加法开始。记住小学:在你学会加减法之前你没有学会除法。 ;-) -- 老实说,为什么有人要使用字节?如果您需要大数的整数运算,请将其分解为处理器可以处理的最宽类型,并使用汇编程序来完成这项工作。在汇编器中实现它要容易得多。 我正在使用一个使用字节的虚拟机 好吧,那么... 使用字节。上一次我必须实现这样的功能是在 40 年前,使用 8 位处理器。目标数据类型是 16 位有符号整数。加法和减法很简单,对于乘法和除法,我使用了二进制算法。一切都是在汇编程序中实现的,因为高级语言隐藏了某些功能,例如进位标志,这让生活变得更加轻松。以上是关于对 2 个整数及其字节执行 add、sub、mul、div、mod 等操作的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向x86 汇编 ( add / sub / mul / div 数值运算指令 | xor / not / sal / sar / shl / shr 位运算指令 )
Android 逆向x86 汇编 ( add / sub / mul / div 数值运算指令 | xor / not / sal / sar / shl / shr 位运算指令 )
汇编指令学习(ADD,SUB,MUL,DIV,XADD,INC,DEC,NEG)