Я выполняю битксор между двумя массивами. Это мой код 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 похожа на bitxor в matlab. Это правильно? Однако, когда я запускаю его в 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.
Как достичь результата выглядят как JAVA-код на языке MATLAB? Заранее спасибо
По документации bitxor
"если [оба аргумента] являются двойными массивами, а assumedtype
не указан, то MATLAB рассматривает integ1 и integ2 как неподписанные 64-битные целые числа ".
Таким образом, вам просто нужно предоставить assumedtype
который может принимать отрицательные значения (т. assumedtype
Любой тип int
без ведущего u
), как
Result=bitxor(D(1,1:SYMBOL_SIZE),D(2,1:SYMBOL_SIZE),'int64');
В версиях MATLAB до R2012b (R2012a bitxor
) вам может потребоваться явно вводить входы, и они должны быть неподписанными. Чтобы использовать подписанные числа, вам нужно сделать какое-то литье, чтобы получить точное:
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
(или что бы вы ни int64
), и преобразование обратно в double должно быть сделано явно, если необходимо:
Result=double(Result);
Скорее всего, был добавлен параметр assumedtype
типа, чтобы сделать этот тип преобразования менее громоздким.