// 傳統寫法
if (num % 2 != 0) { /* 奇數 */ }
// 高效寫法:位元 AND 運算
if ((num & 1) == 1) { /* 奇數 */ }
原理:二進位最低位為 1 即奇數。位運算直接作用於 CPU 暫存器,指令週期遠少於除法指令,效能提升明顯。
方法 A:算術運算(注意溢位風險)
x = x + y;
y = x - y;
x = x - y;
方法 B:XOR 異或運算(無溢位風險,推薦)
x = x ^ y;
y = y ^ x;
x = x ^ y;
適用場景:面試考題、嵌入式系統記憶體極度受限、演示位運算特性。現代 JVM JIT 優化極佳,實務上 temp 變數可讀性更高、效能差異可忽略。
// 定義權限常數(對應 rwx 三個 bit)
int READ = 1 << 0; // 001 = 1
int WRITE = 1 << 1; // 010 = 2
int EXECUTE = 1 << 2; // 100 = 4
// 使用者擁有「讀 + 執行」權限 = 1 | 4 = 5
int userPerm = READ | EXECUTE;
// 判斷是否可讀
boolean canRead = (userPerm & READ) != 0;
// 判斷是否可寫
boolean canWrite = (userPerm & WRITE) != 0;
對應 Linux chmod 777(rwxrwxrwx),每組三位分別代表擁有者/群組/其他人。位遮罩技術廣泛應用於系統權限、功能開關、狀態機設計。
正則表達式基於有限狀態自動機理論,處理速度極快,Linux grep、sed、awk 皆大量依賴。
規則:
1. 首字元為字母
2. 中間允許字母、數字、. - _
3. 尾字元允許字母、數字、空白、. - _
String regex = "^[[a-zA-Z]|[\\u2E80-\\u9FFF]]+[[a-zA-Z]|[0-9]|[\\u2E80-\\u9FFF]|[.|\\-|_]]+\\s*$";
public class RegexTest {
@Test
public void testXmlNodeName() {
String input = "w你w好.-.553.你-.__.-. ";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
System.out.println(matcher.matches() ? "匹配成功" : "匹配失敗");
// 亦可簡寫:Pattern.matches(regex, input)
}
}
關鍵字元說明:^ 開頭、$ 結尾、+ 一次以上、\\s* 零或多空白、\\u2E80-\\u9FFF 涵蓋 CJK 統一表意文字(中日韓漢字)。
這四大技巧皆源於位運算與自動機理論的基礎電腦科學知識。平時多寫代碼、多思考底層原理,才能在關鍵路徑上做出最優選擇。