Tôi đang làm bài tập và tôi không thể tìm ra cách thực hiện điều này. Tôi phải thực hiện một hàm sadd (int x, int y) trả về các số được cộng lại với nhau trừ khi nó tràn (sau đó chỉ trả lại số int tối đa có thể). Tôi đã có thể đưa ra một số giải pháp liên quan đến các câu lệnh đúc và điều kiện, nhưng những câu lệnh đó không được phép trong giải pháp. Chỉ có các nhà khai thác ~!^+ < < >> & và |.Bổ sung độ bão hòa bitwise trong C (HW)
Trả lời
Để thêm số đã ký, tràn đã xảy ra nếu bạn thêm hai số cùng một dấu và nhận được kết quả bằng một dấu khác. Do phạm vi liên quan, không thể tạo tràn khi thêm hai số dấu hiệu khác nhau. Vì vậy, những gì bạn có thể làm là - chỉ xem bit dấu (phần quan trọng nhất trong phần bổ sung của hai) - sử dụng OR độc quyền để xem liệu hai số gốc có khác biệt trong dấu, bổ sung để bạn có '0' nếu chúng khác nhau, '1' cho cùng.
Sau đó, bạn có thể sử dụng OR độc quyền trên kết quả so với một trong các yếu tố đầu vào. Điều đó sẽ cho '0' nếu chúng giống nhau, '1' nếu chúng khác nhau.
Và hai kết quả này lại với nhau để có được tổng thể '1' nếu hai yếu tố đầu vào giống nhau nhưng kết quả khác nhau, '0' ngược lại.
Sau đó, bạn có thể sử dụng kết hợp các ca và OR để điền vào toàn bộ số nguyên với giá trị đó. Giả sử bạn đang ở trong một số nguyên 32 bit, chỉ cần đặt 31 bit thấp nhất để có được số nguyên dương có giá trị cao nhất. Những gì bạn có thể làm sau đó là một bộ tương tự các ca và OR trên bit dấu của một trong hai đầu vào. Độc quyền HOẶC kết quả. Điều đó sẽ thay thế cho số nguyên giá trị thấp nhất nếu đầu vào là số âm.
CHỈNH SỬA: oh và sử dụng giá trị bit cho dù có tràn, được mở rộng để điền vào int, để chọn giá trị nào cần trả lại bằng cách thêm và kết quả bạn sẽ trả lại nếu có tràn, bổ sung và tạo nó với kết quả phụ gia bình thường, sau đó oring (hoặc thêm) hai với nhau.
Presto: tất cả logic nhị phân, không có điều kiện. Tôi cho rằng, vì đó là bài tập về nhà, bạn không muốn mã thực sự?
Tôi có mã này; không chắc chắn nếu nó thích hợp để thêm một câu trả lời đầy đủ nguồn về một câu hỏi bài tập về nhà. Lời giải thích tôi đã nói rõ ràng chưa? – Tommy
Có lẽ không, nhưng gợi ý cho anh ta độ dài trong hướng dẫn mà giải pháp của bạn thực hiện (giả sử tập lệnh MIPS). Chúng tôi có thể chơi code-golf ;-) – smci
- 1. Có sự khác biệt giữa "bổ sung" và "bổ sung bitwise" không?
- 2. C# Vectorized Array bổ sung
- 3. Làm cách nào để thay đổi độ bão hòa của UIImage?
- 4. JQuery thay đổi màu sắc, độ bão hòa, gamma của <img>?
- 5. Chế độ bổ sung trên Google Drive
- 6. Cách tốt nhất để tìm kiếm giá trị bão hòa trong danh sách được sắp xếp
- 7. Thuật toán nào mà Photoshop sử dụng để khử bão hòa một hình ảnh?
- 8. Chế độ hòa trộn Android
- 9. bổ sung yếu tố Array trong ruby
- 10. C# xóa trả về vận chuyển bổ sung từ Luồng
- 11. Bổ sung ngôn ngữ cho Delphi
- 12. Bổ sung mô-đun vào python
- 13. màu tổng hợp: Chế độ hòa trộn và chế độ hòa trộn trên iPhone
- 14. Truyền dữ liệu bổ sung cho EditorTemplate
- 15. Có thể thêm các trường bổ sung vào bảng bổ sung @ManyToMany Hibernate không?
- 16. Tại sao việc bổ sung các kiểu trả về theo sau cần thiết trong C++ 11?
- 17. Làm thế nào để xóa các parens bổ sung trong chế độ Paredit?
- 18. Xóa dấu ngoặc bổ sung trong chế độ Pareditwise theo chiều kim đồng hồ
- 19. Tôi làm cách nào để sử dụng UIButton trong chế độ xem bổ sung UICollection?
- 20. MVC 3 - bổ sung Chế độ xem mặc không xuất hiện trong Editor Đối với mẫu
- 21. Thêm cột bổ sung để xem, không có trong bảng
- 22. Hòa giải C++ GUI mẫu
- 23. Log4Net và các trường bổ sung
- 24. Gửi dữ liệu bổ sung với multipart
- 25. In kết quả bổ sung trong Google Test
- 26. Chuyển đổi bổ sung của Hai
- 27. Ghi nhật ký bổ sung JBehave
- 28. SSRS Các trang bổ sung bí ẩn
- 29. Tham số bổ sung với socket.io
- 30. maven triển khai tệp jar bổ sung
Đặt câu hỏi về bài tập về nhà là ok, nhưng bạn nên gắn thẻ chúng làm bài tập ở nhà. –
Hãy thử và đăng những gì bạn nghĩ ra. (Như Brian đã nói, HW câu hỏi là tốt nhưng nó tốt hơn để cho nó bắn tốt nhất của bạn và đăng mã của bạn. Chào mừng bạn đến SO!) – John
Nếu không có 'if' /' else', điều này sẽ là hacky .. –