Định nghĩa
Toán tử unary ~ đảo ngược tất cả bit của toán hạng 32-bit (1→0, 0→1). Tương đương -(x + 1).
Ví dụ
<script>
var b = 3; // 000...011
document.write("(~b) = " + (~b)); // -4 (111...100)
</script>
Công thức
~x === -(x + 1)
// ~3 = -4
// ~-4 = 3
// ~0 = -1
// ~-1 = 0
Ứng dụng kinh điển: indexOf check
var str = "hello";
if (~str.indexOf("lo")) { // indexOf trả 3 → ~3 = -4 (truthy)
console.log("Tìm thấy");
}
if (!~str.indexOf("xy")) { // indexOf trả -1 → ~-1 = 0 (falsy)
console.log("Không tìm thấy");
}
Hiện nay khuyên dùng: str.includes("lo") hoặc str.indexOf("lo") !== -1 – rõ ràng hơn.
Ứng dụng khác
~~x(double tilde) – làm tròn về 0 (giống Math.trunc) – xem bài 1003055120.- Bitmask:
~MASKtạo mask ngược để clear bit:value & ~MASK.
Lưu ý
- Hoạt động trên 32-bit signed integer.
- Kết quả có thể âm.