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
(即任何没有前导u
的int
类型),比如
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
选项是为了减少这种类型转换的麻烦。
我正在两个数组之间执行位异或。这是我的 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
(即任何没有前导u
的int
类型),比如
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
选项是为了减少这种类型转换的麻烦。