2011-07-04 42 views
5

Một số thời gian trước đây tôi đã nhìn thấy một nơi nào đó một thủ thuật để thực hiện thao tác modulo bằng cách sử dụng toán tử bit. Nhưng bây giờ tôi không thể theo bất kỳ cách nào để thực hiện hoạt động đúng đắn. Bất cứ ai cũng biết làm thế nào để làm điều đó? Từ những gì tôi nhớ nó nhanh hơn sử dụng%.Các cách khác để thực hiện thao tác modulo

+0

http://en.wikipedia.org/wiki/Modulo_operation#Performance_issues - cho quyền hạn của 2. –

+0

Câu hỏi hay, tôi đã kiểm tra ở đây: http://jsperf.com/js-modulo và câu trả lời có vẻ tốt! – TTT

Trả lời

8

Các "lừa" là nhị phân AND một giá trị với 1. Bất kỳ số lẻ phải có bit đầu tiên thiết lập để 1.

Vì vậy

var foo = 7; 

if(foo & 1) { // true 
} 

Sử dụng toán tử AND có một hiệu suất tốt hơn trong gần như tất cả các nền tảng/trình duyệt.

for(var loop = 0; loop < 10; loop++) { 
    if(loop & 1) { 
     console.log('I am ', loop, ' and I am odd!'); 
    } 
} 
8

Bạn có thể làm modulo 2^k (công suất 2) bằng cách ANDing giá trị của bạn bằng (2^k) -1.

+1

+1 nhưng chỉ cho số dương –

Các vấn đề liên quan