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

Matlab 如何对电源64执行模2加法,matlab,math,modulo,block-cipher,Matlab,Math,Modulo,Block Cipher,我想使用MATLAB对p1和p2之间的幂64进行模2加法。p1和p2都属于uint64类型。以下代码正确吗 c1 = p1 + p2; if (c1> 2^64) c1 = c1 - 2^64; end uint64类型变量的最大值为2^64-1(在Matlab中,intmax('uint64')),当您执行的加法运算超过此值(溢出)时,结果为2^64-1,因此代码将无法工作 例如: p1=uint64(2^64-1)-5; p2=uint64(10); c1=p1+p2; c

我想使用MATLAB对
p1
p2
之间的幂64进行模2加法。
p1
p2
都属于
uint64
类型。以下代码正确吗

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

uint64
类型变量的最大值为
2^64-1
(在Matlab中,
intmax('uint64')
),当您执行的加法运算超过此值(溢出)时,结果为
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-1;
其他的
c1=p1+p2;
结束
此代码将在
p1
p2


感谢您的更正。

什么数据类型是
p1
p2
?p1和p2的(双?uint64?)类型为uint64MATLAB,进行饱和运算,因此如果加法中存在溢出,
c1
将等于2^64-1。