Matlab中正负值的Bitxor函数

时间:2015-01-26 16:25:27

标签: java matlab

我在两个数组之间执行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代码?提前谢谢

1 个答案:

答案 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选项,以减少此类型转换的麻烦。