a ^ b ^ b = a —— 同一數值異或兩次還原自身。利用這一性質,無需臨時變量即可交換兩數,也能構建極簡加密。
public class VariableExchange {
public static void main(String[] args) {
long A = 12345, B = 67890;
System.out.println("交換前: A=" + A + ", B=" + B);
A = A ^ B;
B = B ^ A; // 相當於 B ^ (A ^ B) = A
A = A ^ B; // 相當於 (A ^ B) ^ A = B
System.out.println("交換後: A=" + A + ", B=" + B);
}
}
數學推導:
a1 = a ^ b b = a1 ^ b = (a ^ b) ^ b = a a = a1 ^ b = a1 ^ a = (a ^ b) ^ a = b
cipher = plaintext ^ keyplaintext = cipher ^ key(同一操作)適用於非極高安全要求的輕量級混淆(如配置文件敏感字段、遊戲存檔防改)。
a ^= a 會歸零,交換前必須確保 a != b(地址不同);int/long/char 等均可,引用類型不可直接異或;Scanner sc = new Scanner(System.in);
System.out.print("請輸入 A: ");
long A = sc.nextLong();
System.out.print("請輸入 B: ");
long B = sc.nextLong();
異或技巧雖老,但在嵌入式、演算法競賽、輕量級混淆中依然閃光——理解本質,靈活應用。