如何对电源64执行模2加法

时间:2019-07-07 13:09:21

标签: matlab math modulo block-cipher

我想使用MATLAB对p1p2之间的幂64执行模2的加法运算。 p1p2的类型均为uint64。以下代码正确吗?

c1 = p1 + p2;
if (c1> 2^64)
    c1 = c1 - 2^64;
end

1 个答案:

答案 0 :(得分:2)

uint64类型的变量的最大值为2^64-1(在Matlab中为intmax('uint64')),并且当您执行超过此值的加法运算(溢出)时,结果为{ {1}},因此您的代码将无法使用。

例如:

2^64-1

p1 = uint64(2^64-1) - 5; p2 = uint64(10); c1 = p1 + p2; 的结果是:

c1

>> c1 = uint64 18446744073709551615 (而不是2^64-1

2^64-1 + 5的结果是:

c1-p1

但是应该是>> c1-p1 ans = uint64 5

解决方法:

您可以在加法之前检查是否会发生溢出,如果存在,请计算余数:

10

此代码将对intmaxDif = intmax('uint64') - p1; if(p2 >= intmaxDif) c1 = p2 - intmaxDif; else c1 = p1 + p2; end p1之间的幂64执行模2加运算。