两个短整数的异或

我正在以传统方式使用XOR ^运算符计算两个short integers XOR ^ 。 以下是方法 –

 short a=197; short b=341; short y = (short) (a ^ b); 

但是XOR总是返回整数,但在我的情况下输入是短整数,这就是为什么我正在向XOR输出做空。 XOR可以用不同的方式计算(例如:使用BigInteger等),但性能明智(更少的时间),这对短整数最好? 在记住性能的同时,我应该首先使用Integer.toBinaryString(number)将每个短整数转换为二进制数,然后应用按位异或?

 short s1 = ... short s2 = ... short result = (short) (s1 ^ s2); 

这是将两个short放在一起的最有效方法。 它不会遇到创建BigInteger的开销,并且转换将永远不会导致溢出问题,因为s1s2都是short的开始。

通过“将每个短整数转换为二进制数”并不是很清楚你的意思 – 短的已经是一个数字,并且它的表示无论如何都是自然的二进制。

你只想要:

 short x = ...; short y = ...; short z = (short) (x ^ y); 

你需要强制转换为x ^ y将两者都提升为int ,结果将是一个int 。 但是,结果必须在short范围内,因此在不丢失信息的情况下执行此演员是安全的。

有关XOR的更多信息,请参阅JLS的第15.22.1 节 ,有关二进制数字推广的信息,请参见第 5.6.2节 。

我不是100%肯定你在问什么,但希望这会有所帮助:

Java强制两个操作数都输入int。 这就是为什么结果是int。

http://java.comsci.us/syntax/expression/bitwisexor.html

因此,您的短路将自动转换为int,并且XOR操作将在整数操作数上非常有效地完成。

如果其中一个操作数很长,则两种类型都被强制转换为long。 但是,这不适用于您的情况。

最重要的是,鉴于您的输入都很短,如果您需要一个简短的结果,最有效的方法就是

 short result = (short) (operandA ^ operandB);