Tôi cần tính cơ sở nhật ký 2 của một số trong C nhưng tôi không thể sử dụng thư viện toán học. Câu trả lời không cần phải chính xác, chỉ với int gần nhất. Tôi đã nghĩ về nó và tôi biết tôi chỉ có thể sử dụng một vòng lặp while và tiếp tục chia số cho 2 cho đến khi nó là < 2, và giữ số lần lặp lại, nhưng điều này có thể sử dụng toán tử bitwise không?Làm thế nào để đăng nhập máy tính cơ sở 2 bằng cách sử dụng các toán tử bitwise?
Trả lời
Nếu bạn đếm shifting làm toán tử bitwise, điều này thật dễ dàng.
Bạn đã biết làm thế nào để làm điều đó bằng cách phân chia liên tiếp bằng 2.
x >> 1
cũng giống như x/2
cho bất kỳ số nguyên unsigned trong C.
Nếu bạn cần phải thực hiện điều này nhanh hơn, bạn có thể làm một "phân chia và chinh phục" - nhanh, nói, 4 bit tại một thời điểm cho đến khi bạn đạt tới 0, sau đó quay lại và xem 4 bit cuối cùng. Điều đó có nghĩa là tối đa 16 ca và 19 lần so sánh thay vì 63 lần. Cho dù nó thực sự nhanh hơn trên một CPU hiện đại, tôi không thể nói mà không thử nghiệm. Và bạn có thể thực hiện điều này một bước xa hơn, đầu tiên làm các nhóm 16, sau đó 4, sau đó 1. Có thể không hữu ích ở đây, nhưng nếu bạn có một số số nguyên 1024 bit, nó có thể đáng xem xét.
Cảm ơn, tôi đã không nhận ra nó hiển nhiên như thế nào. Tôi đã hiểu rồi. – SKLAK
@SKLAK: Để có thêm niềm vui, hãy thử biên dịch mã '/ 2' và' >> 1' bằng -O2 và xem nó khác như thế nào. Nếu một là nhanh hơn đáng kể so với khác, bạn cũng có thể nhận được chính xác cùng một mã cho cả hai. – abarnert
Chúng sẽ chỉ giống với 'unsigned'. Đối với 'int', có một thao tác bổ sung để thêm bit dấu trước, để đảm bảo rằng kết quả làm tròn về 0 chứ không phải là vô cực âm. –
Đã trả lời bằng cách abamert nhưng chỉ để được cụ thể hơn đây là cách bạn sẽ mã hóa nó:
Log2(x) = result
while (x >>= 1) result++;
- 1. Làm thế nào để thực hiện Bitcount chỉ sử dụng các toán tử Bitwise?
- 2. Sử dụng toán tử Bitwise trên cờ
- 3. HQL để CriteriaQuery khi sử dụng toán tử Bitwise
- 4. Tính Log cơ sở 2
- 5. Khi nào tôi nên sử dụng toán tử bitwise?
- 6. Tạo mẫu bit cụ thể bằng cách sử dụng toán tử bitwise
- 7. Làm thế nào để sử dụng các hàm tạo của lớp cơ sở và toán tử gán trong C++?
- 8. Tuyên bố có điều kiện sử dụng toán tử bitwise
- 9. Tìm số mũ của n = 2 ** x bằng cách sử dụng các phép toán bit [logarit trong cơ sở 2 của n]
- 10. Phát hiện người dùng đã đăng nhập trên máy tính bằng cách sử dụng Java
- 11. Toán tử bitwise để lấy byte từ 32 bit
- 12. Kiểm tra xem một số có dương hay âm bằng cách sử dụng toán tử bitwise
- 13. Cần giúp đỡ tìm hiểu cách sử dụng các toán tử Bitwise
- 14. Làm thế nào để tạo biểu thức động với một toán tử bitwise và enums?
- 15. sử dụng các toán tử bitwise để đóng gói nhiều giá trị trong một int
- 16. Làm thế nào để sử dụng toán tử bitwise để chuyển nhiều giá trị Integer vào một hàm cho Java?
- 17. Làm thế nào để đàn áp C CS0675 # cảnh báo: Bitwise-hoặc nhà điều hành được sử dụng trên một toán hạng đăng nhập mở rộng
- 18. Cách thay thế bằng cách sử dụng toán tử% và/Toán tử trong C++
- 19. Sử dụng đăng nhập cơ sở 10 trong một công thức trong Java
- 20. Một số câu hỏi về các toán tử bitwise
- 21. Các toán tử bitwise và chuyển đổi một int thành 2 byte và ngược lại
- 22. Tôi nên sử dụng cơ sở dữ liệu NoSQL nào để đăng nhập?
- 23. Làm cách nào để tham gia 2 bảng trên 2 cơ sở dữ liệu khác nhau?
- 24. Làm thế nào để tạo một cơ sở dữ liệu mới bằng cách sử dụng SQLAlchemy?
- 25. Làm thế nào để sử dụng các toán tử JSON trên cột được nhập JSON trong postgresql 9.3
- 26. Làm cách nào để đăng nhập vào cơ sở dữ liệu Oracle?
- 27. Thế nào là | và^toán tử được sử dụng cho?
- 28. Tôi làm cách nào để sử dụng Firebase để xử lý các tính toán phía máy chủ tự động?
- 29. Làm cách nào để tính toán chi phí lưu trữ thiết kế cơ sở dữ liệu?
- 30. Làm thế nào để sử dụng các phép toán bit để thay thế các toán tử modulu và phân chia?
Bạn đếm [chuyển] (http://en.wikipedia.org/wiki/Bitwise_operation#Bit_shifts) như một toán tử bitwise? Nếu vậy, câu trả lời là khá rõ ràng. Nếu không, nó phức tạp hơn. – abarnert
0_o Tại sao bạn không thể sử dụng thư viện toán học? –
@JackManey: Có lẽ đây là bài tập về nhà hoặc tương đương tự dạy học. Nhưng đó là tốt; anh ta dường như đã nỗ lực vào nó (anh ấy luôn có một giải pháp làm việc), và đang tìm kiếm những gợi ý để xem có cách nào khác để làm điều đó, không yêu cầu chúng tôi làm bài tập về nhà cho anh ấy. – abarnert