Tôi muốn biết cách lấy phần còn lại bằng cách chia một số nguyên với một số nguyên khác (cả hai số nguyên) chỉ sử dụng bithift hoặc bitwise operator. Nhà điều hành /
hoặc nhà điều hành %
không được sử dụng.Bitshifts để nhận số còn lại
Ví dụ: để nhận phần còn lại khi số chia có dạng 2^k
, hoạt động sau sẽ sinh phần còn lại.
m = Remainder
n = The number
d = The divisor
m = n & (d - 1)
Tuy nhiên phương pháp này chỉ hoạt động khi d
có dạng 2^k
. Tôi muốn biết một phương pháp tương tự cho quyền hạn không thuộc số 2
. Tôi hiện đang giải quyết sự cố từ programming challenges
và muốn sử dụng phương pháp như vậy để giảm thời gian thực hiện chương trình
Thực tế không phải là biểu diễn bit chỉ trong cơ số 2 là giới hạn? Xem xét giá trị 43/7 - giá trị thực sự là 6.142857 .... Bạn đã cân nhắc cách tiếp cận chung nào cho một giá trị trong cơ sở cao hơn 2? – Makoto
Không có phương pháp chung. Bạn có thể thay thế phân chia bằng phép nhân và một số thay đổi và bổ sung/phép trừ nếu bạn biết ước số đó. Yêu cầu bất kỳ trình biên dịch C có thẩm quyền về nó, và nó sẽ cung cấp cho bạn các giá trị ma thuật cho bất kỳ hằng số thời gian biên dịch. –
Trừ khi câu trả lời chỉ liên quan đến câu lệnh 1 bitshift, tôi cá rằng bạn không đánh bại nhà điều hành mod javas. – goat