matlab中正负值的bitxor函数

Bitxor function of positive and negative values in matlab

我正在两个数组之间执行位异或。这是我的 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();
            }

     }
}

结果return

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代码的结果?提前致谢

根据 bitxor、"if [both arguments] are double arrays, and assumedtype is not specified, then MATLAB treats integ1 and integ2 as unsigned 64-bit integers."

的文档

所以你只需要提供一个可以取负值的assumedtype(即任何没有前导uint类型),比如

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 选项是为了减少这种类型转换的麻烦。