我想使用MATLAB对p1
和p2
之间的幂64执行模2的加法运算。 p1
和p2
的类型均为uint64
。以下代码正确吗?
c1 = p1 + p2;
if (c1> 2^64)
c1 = c1 - 2^64;
end
答案 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加运算。