两个短整数的异或

时间:2012-03-24 22:11:35

标签: java xor

我正在以传统方式使用XOR运算符计算两个short integers的{​​{1}}。以下是方法 -

XOR ^

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

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

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

你只想:

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

您需要将广告素材x ^ y推广到int,结果将是int。但是,结果必须在short的范围内,因此在不丢失信息的情况下执行此演员是安全的。

有关特定XOR的详细信息,请参阅section 15.22.1 of the JLS,有关二进制数字促销的信息,请参阅section 5.6.2

答案 2 :(得分:1)

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

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

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

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

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

底线,假设您的输入都很短,如果您需要一个简短的结果,最有效的方法是

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