Làm cách nào để đặt, xóa, chuyển đổi và kiểm tra một chút bằng JavaScript?Làm cách nào để bạn đặt, xóa và chuyển đổi một bit trong JavaScript?
Trả lời
Để có được một mặt nạ bit:
var mask = 1 << 5; // gets the 6th bit
Để kiểm tra xem một chút được thiết lập:
if ((n & mask) != 0) {
// bit is set
} else {
// bit is not set
}
Để thiết lập một chút:
n |= mask;
Để xóa một chút:
n &= ~mask;
Để chuyển đổi một chút:
n ^= mask;
Tham khảo Javascript bitwise operators.
Tôi muốn thêm một số điều (với nhờ @cletus)
function bit_test(num, bit){
return ((num>>bit) % 2 != 0)
}
function bit_set(num, bit){
return num | 1<<bit;
}
function bit_clear(num, bit){
return num & ~(1<<bit);
}
function bit_toggle(num, bit){
return bit_test(num, bit) ? bit_clear(num, bit) : bit_set(num, bit);
}
Điều này thật tuyệt vời. Bạn có thể giải thích tại sao bit_test hoạt động? Tôi hiểu sự thay đổi đúng để di chuyển bit thú vị đến vị trí ngoài cùng bên phải, nhưng tôi bị lạc cố gắng hiểu giá trị trung gian là gì và tại sao phần còn lại của nó khi chia cho 2 là không khác khi được đặt. – Raoul
Sau khi bạn nhận được bit mong muốn ở vị trí ngoài cùng bên phải, bạn chỉ cần kiểm tra xem giá trị mới có bị giảm hay không (new_value% 2! = 0). Một số suy giảm sẽ có bit0 = 1 hoặc else bit0 = 0 (vì bit0 là 2 để cấp 0 là 1) – UnLoCo
tôi đã xây dựng một lớp BitSet với sự giúp đỡ của thông tin @cletus:
function BitSet() {
this.n = 0;
}
BitSet.prototype.set = function(p) {
this.n |= (1 << p);
}
BitSet.prototype.test = function(p) {
return (this.n & (1 << p)) !== 0;
}
BitSet.prototype.clear = function(p) {
this.n &= ~(1 << p);
}
BitSet.prototype.toggle = function(p) {
this.n ^= (1 << p);
}
@user JavaScript và C/C++ là các ngôn ngữ khác nhau. Rất hữu ích để có câu trả lời khác nhau từ cả hai. – cmac