Theo tiêu chuẩn c99, kích thước của long long
phải tối thiểu 64 bit. Làm thế nào điều này được thực hiện trong một máy 32 bit (ví dụ: bổ sung hoặc nhâns). Ngoài ra, Tương đương với long long
bằng C++ là gì.thực hiện lâu dài trong máy 32 bit
Trả lời
Trên kiến trúc IA32, số nguyên 64 bit được thực hiện bằng cách sử dụng hai thanh ghi 32 bit (eax và edx).
Có nền tảng tương đương cụ thể cho C++ và bạn có thể sử dụng tiêu đề stdint.h nếu có (tăng cung cấp cho bạn one).
Nếu bạn quan tâm đến bit kích cỡ, bạn nên sử dụng
#include <stdint.h>
int32_t n;
và bạn bè. Điều này làm việc cho C++ là tốt.
Số 64 bit trên máy 32 bit được triển khai như bạn nghĩ, thêm 4 byte. Do đó bạn có thể thực hiện riêng 64-bit datatype của bạn bằng cách làm một cái gì đó như thế này:
struct my_64bit_integer {
uint32_t low;
uint32_t high;
};
Bạn sẽ đương nhiên phải thực hiện khai thác toán học cho mình.
Có một int64_t trong stdint.h đi kèm với phiên bản GCC của tôi, và trong Microsoft Visual C++ bạn cũng có loại __int64.
Tương đương trong C++ cũng dài. Nó không được yêu cầu bởi tiêu chuẩn, nhưng hầu hết các trình biên dịch hỗ trợ nó bởi vì nó rất hữu ích.
Làm cách nào để triển khai? Hầu hết các kiến trúc máy tính đã có sẵn hỗ trợ cho các phép cộng và trừ nhiều từ. Họ không làm trực tiếp 64 bit addititions nhưng sử dụng cờ carry và một add-instruction đặc biệt để xây dựng thêm 64 bit từ hai bit 32 bit thêm vào.
Cùng một phần mở rộng tồn tại cho phép trừ (carry được gọi là vay trong những trường hợp này).
Nhân và phép chia dài có thể được tạo từ các phép nhân nhỏ hơn mà không cần sự trợ giúp của cờ mang. Đôi khi chỉ đơn giản là làm các hoạt động từng chút một là nhanh hơn mặc dù.
Có kiến trúc không có bất kỳ cờ nào cả (một số chip DSP và vi đơn giản). Trên các kiến trúc này, tràn phải được phát hiện với các phép toán logic. Số học nhiều từ có xu hướng chậm trên các máy này.
Như mọi người đã nêu, một số nguyên 64 bit thường được thực hiện bằng cách sử dụng hai số nguyên 32 bit cùng nhau. Sau đó, tạo mã thông minh được sử dụng để theo dõi các bit carry and/or borrow để theo dõi tràn, và điều chỉnh cho phù hợp. Điều này tất nhiên làm cho số học như vậy tốn kém hơn về không gian mã và thời gian thực hiện, so với cùng một mã được biên dịch cho một kiến trúc với hỗ trợ riêng cho các hoạt động 64-bit.
Chuẩn C++ tiếp theo (do năm 2009 hoặc 2010) được dự kiến bao gồm loại "dài". Như đã đề cập trước đó, nó đã được sử dụng phổ biến.
Việc triển khai tùy thuộc vào nhà biên dịch trình biên dịch, mặc dù máy tính luôn hỗ trợ nhiều hoạt động chính xác.Một số ngôn ngữ, như Python và Common Lisp, yêu cầu hỗ trợ cho các số nguyên chính xác không xác định. Cách đây rất lâu, tôi đã viết các phép nhân và phân chia 64 bit cho một máy tính (Z80) có thể quản lý phép cộng và trừ 16 bit, không có phép nhân phần cứng nào cả.
Có lẽ cách dễ nhất để xem cách hoạt động được thực hiện trên trình biên dịch cụ thể của bạn là viết một mẫu mã và kiểm tra đầu ra của trình lắp ráp, có sẵn từ tất cả các trình biên dịch chính mà tôi đã làm việc.
- 1. Dài dài int trên máy 32 bit
- 2. Có lâu luôn 64 bit trong cả máy 32 và 64 bit
- 3. __int64 trên máy 32 bit?
- 4. Chạy dll 32 bit trên máy 64 bit trong java
- 5. Tạo 32 bit JavaFX Native Bundle trong máy 64 bit
- 6. Có thể thực hiện Bit-5 Log2 (Int 32) Bit trong Java?
- 7. chạy nhị phân 32 bit trên máy 64 bit
- 8. PHP json_decode trên máy chủ 32 bit
- 9. Có u_int64_t trên máy 32 bit không?
- 10. 32 bit int * 32 bit int = 64 bit int?
- 11. Làm cách nào để bit chuyển đổi dài hơn 32 bit?
- 12. Máy ảo 32 hoặc 64 bit nhanh hơn trên máy 64 bit (vmware)
- 13. lâu dài trong C/C++
- 14. JDK 64bit hoặc 32 bit?
- 15. Chuyển đổi số nguyên không dấu 32 bit (lớn cuối) thành dài và quay lại
- 16. Biên dịch ứng dụng MATLAB 32 bit trên máy 64 bit (c + +)
- 17. bit gương của từ 32 bit
- 18. Mã kéo dài bao lâu?
- 19. Con trăn 64 bit có thể tạo các tệp thực thi Windows 32 bit
- 20. Java JDK 32 bit và 64 bit
- 21. Có cách nào để thực thi các chương trình 64 bit trên máy tính 32 bit không?
- 22. Cách phát hiện tệp PE đã cho (exe hoặc dll) là 64 bit hoặc 32 bit
- 23. Trang web có thể dài bao lâu?
- 24. Số lớn hơn 2^32 được xử lý bởi máy 32 bit như thế nào?
- 25. Windows Phone 8 SDK có thể được cài đặt trên máy tính Windows 32 32 bit
- 26. GCC có hỗ trợ lâu dài không?
- 27. Nhập 32 bit dll trong 64 bit .Net application
- 28. Biên dịch ứng dụng 32-bit bằng Visual Studio trên máy 64 bit
- 29. Hoạt động trên 64 bit hoạt động trong kiến trúc 32 bit?
- 30. sizeof (dài) trong 64-bit C++
Máy 8 và 16 bit cũng được quản lý để xử lý các biến lớn hơn "bit xử lý" của chúng. Nhiều câu hỏi đã được trả lời bởi lịch sử. –