Tôi thường thấy điều này trong JavaScript:Math.floor() | 0
var val = (myvar/myothervar) | 0;
Mà như xa như tôi hiểu là một trong số rất nhiều các phím tắt để sàn một giá trị trong JavaScript (như ~~
, và >> 0
, vv). Tuy nhiên, tôi đã nhìn vào một đoạn mã gần đây rằng đã làm điều này:
var val = Math.floor(myvar/ myothervar)|0;
Họ đã sử dụng Math.floor()
và sau đó cũng đã làm một Bitwise OR với 0
. Tác giả đã làm điều này nhiều lần, vì vậy nó không chỉ là một lỗi đánh máy mà họ đã làm một lần. Bạn kiếm được gì bằng cách làm cả hai?
Đối với người hiếu, mã tôi đề cập đến có thể được tìm thấy here
Có lẽ điều này được thiết kế để điều trị 'Infinity' như '0' trong trường hợp mà' myothervar' được '0'? Ví dụ, khi mô phỏng lực hấp dẫn giữa hai điểm ('G * m/r^2'), có thể giả sử không có lực hấp dẫn giữa hai điểm đồng thời (khi' r = 0') hơn là cố gắng hấp dẫn vô hạn. – apsillers
@apsillers: Ví dụ hay, nhưng sẽ tốt hơn nếu kiểm tra xem r có nhỏ tùy ý hay không. Chia cho '5e-324' không đặc biệt mong muốn là – Eric