重複の可能性:
XOR 変数のスワッピングはどのように機能しますか?
次のように、3 番目の変数を作成せず
に、2 つの変数の値を切り替える解決策を見つけました。
x ^= y;
y ^= x;
x ^= y;
これは、ブール値以外の方法で排他的論理和演算子 (「XOR」) を使用しています (ビットごとだと思いますか?)。最近離散数学を学んだので、真理値表を使った XOR 演算子の使い方を理解できました。
.......................
x y (x XOR y)
.......................
T T F
T F T
F T T
F F F
両方の変数が等しい場合、式はfalse(x XOR y)
と評価され、それ以外の場合はtrueと評価されます。しかし、値がブール値でない場合のWTFは?
とにかく、x と yをブール値ではなくint値に設定すると、操作は単純ではなくなります。したがって、たとえば let
x = 3
、 and y = 5
:
public class SwitchValues
{
// instance methods
public void SwitchBoolean(boolean x, boolean y)
{
System.out.println("The variable \"x\" is initially: " + x + ".\n" +
"The variable \"y\" is initially: " + y + ".");
x ^= y;
System.out.println("x ^= y is equal to: " + x + ".");
y ^= x;
System.out.println("y ^= x is equal to: " + y + ".");
x ^= y;
System.out.println("x ^= y is now equal to: " + x + ".");
System.out.println("The variable \"x\" is now: " + x + ".\n" +
"The variable \"y\" is now: " + y + ".\n");
} // end of SwitchBoolean
public void SwitchInts(int x, int y)
{
System.out.println("The variable \"x\" is initially: " + x + ".\n" +
"The variable \"y\" is initially: " + y + ".");
x ^= y;
System.out.println("x ^= y is equal to: " + x + ".");
y ^= x;
System.out.println("y ^= x is equal to: " + y + ".");
x ^= y;
System.out.println("x ^= y is now equal to: " + x + ".");
System.out.println("The variable \"x\" is now: " + x + ".\n" +
"The variable \"y\" is now: " + y + ".\n");
} // end of SwitchInts
// main method
public static void main(String[] args)
{
SwitchValues obj = new SwitchValues();
obj.SwitchBoolean(true, false);
obj.SwitchInts(3, 5);
} // end of main method
} // end of class SwitchValues
... int 値に対して出力された結果は次のとおりです。
The variable "x" is initially: 3.
The variable "y" is initially: 5.
x ^= y is equal to: 6.
y ^= x is equal to: 3.
x ^= y is now equal to: 5.
The variable "x" is now: 5.
The variable "y" is now: 3.