我在两个数组之间执行bitxor。这是我的java代码
public class HelloWorld{
public static void main(String []args){
int SYMBOL_SIZE=3;
byte[][] D = new byte[2][SYMBOL_SIZE];
D[0][0]=57;
D[0][1]=22;
D[0][2]=82;
D[1][0]=23;
D[1][1]=0;
D[1][2]=-60;
for (int j=0; j<SYMBOL_SIZE; j++)
{
//System.out.print((byte) (D[1][j]));
D[1][j]=(byte) (D[1][j] ^ D[0][j]);
System.out.print(D[1][j]);
System.out.println();
}
}
}
结果返回
46
22
-106
现在,我想在MATLAB中执行上述功能。我在JAVA中检查了^
操作,类似于matlab中的bitxor。这样对吗?但是,当我运行matlab时,它有错误。这是我的matlab代码
SYMBOL_SIZE=3;
D=zeros(2,SYMBOL_SIZE);
D(1,1:SYMBOL_SIZE)=[57,22,82];
D(2,1:SYMBOL_SIZE)=[23,0,-60];
%% Perform ^ operation
Result=bitxor(D(1,1:SYMBOL_SIZE),D(2,1:SYMBOL_SIZE));
结果是
Error using bitxor
Inputs must be non-negative integers.
如何通过MATLAB语言实现结果看起来像JAVA代码?提前谢谢
答案 0 :(得分:1)
根据bitxor
的文档,&#34;如果[两个参数]都是双数组,并且未指定assumedtype
,则MATLAB将integ1和integ2视为无符号64位整数强>&#34;
因此,您只需提供一个可以采用负值的assumedtype
(即,没有前导int
的任何u
类型),例如
Result=bitxor(D(1,1:SYMBOL_SIZE),D(2,1:SYMBOL_SIZE),'int64');
在R2012b(R2012a bitxor
)之前的MATLAB版本中,您可能需要显式转换输入,它们必须是无符号的。
为了使用带符号的数字,您需要进行一些类型转换才能获得准确的数字:
a = int64(D(1,1:SYMBOL_SIZE));
b = int64(D(2,1:SYMBOL_SIZE));
a = typecast(a,'uint64');
b = typecast(b,'uint64');
Result = typecast(bitxor(a,b),'int64');
但请注意,现在Result
的类型为int64
(或者您投射的任何内容),如果需要,还需要明确转换为double:
Result=double(Result);
可能会添加assumedtype
选项,以减少此类型转换的麻烦。