我正在以传统方式计算XOR两个short integers使用XOR ^运算符.以下是方法 -
short a=197;
short b=341;
short y = (short) (a ^ b);
Run Code Online (Sandbox Code Playgroud)
但是XOR总是返回整数,但在我的情况下输入是短整数,这就是为什么我正在向XOR输出做空.XOR可以用不同的方式计算(例如:使用BigInteger等),但性能明智(较少的时间),这对短整数最好?在记住性能的同时,我应该首先将每个短整数转换为二进制数,Integer.toBinaryString(number)然后应用按位异或?
short s1 = ...
short s2 = ...
short result = (short) (s1 ^ s2);
Run Code Online (Sandbox Code Playgroud)
这是将两个short一起进行XOR的最有效方法.它不会碰上创建的开销BigIntegerS和演员绝不会导致溢出问题,因为这两个s1和s2是shorts到开始.
通过"将每个短整数转换为二进制数"并不是很清楚你的意思 - 短的已经是一个数字,并且它的表示无论如何都是自然的二进制.
你只想要:
short x = ...;
short y = ...;
short z = (short) (x ^ y);
Run Code Online (Sandbox Code Playgroud)
你需要演员,因为它x ^ y会促进两者int,结果将是一个int.但是,结果必须在任何范围内short,因此在不丢失信息的情况下执行此演员是安全的.
有关XOR的更多信息,请参阅JLS的第15.22.1 节,有关二进制数字推广的信息,请参见第5.6.2节.