两个短整数的异或
我正在以传统方式使用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
的开销,并且转换将永远不会导致溢出问题,因为s1
和s2
都是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);