Tôi đang triển khai giải mã các số nguyên được nén BER và gần đây tôi đã tìm thấy một hành vi JavaScript lạ liên quan đến hoạt động bitwise với số nguyên lớn.Hoạt động bitwise với số nguyên lớn
ví dụ .:
var a = 17516032; // has 25 bits
alert(a << 7) // outputs -2052915200
alert(a * 128) // outputs 2242052096
alert(2242052096 >> 16) // outputs -31325
alert(2242052096/65536) // outputs 34211
Trong khi thực hiện giải pháp đầu tiên (nhân thay vì dịch trái) là chấp nhận được, thứ hai là không.
Tại sao điều đó xảy ra? Làm thế nào để chịu đựng với nó?
Tôi không hiểu tại sao bộ phận sẽ không được chấp nhận? – Guffa
@Guffa Tôi cần một số cách tiếp cận chung, không chỉ cho các số nguyên 32 bit. –
Phân chia không được thực hiện trên các số nguyên, nó được thực hiện trên các số dấu phẩy động, vì vậy tôi không hiểu đối số của bạn. Bên cạnh đó, một số điểm nổi chính xác gấp đôi chỉ có thể đại diện cho một số nguyên 53 bit, do đó, đó là không nhiều anyway nếu bạn muốn giải mã BER-nén số. – Guffa