Tôi đang sử dụng một int
loại để lưu trữ một giá trị. Theo ngữ nghĩa của chương trình, giá trị luôn thay đổi trong một phạm vi rất nhỏ (0 - 36) và int
(không phải a char
) chỉ được sử dụng vì hiệu quả của CPU.
Có vẻ như nhiều tối ưu hóa số học đặc biệt có thể được thực hiện trên một phạm vi số nguyên nhỏ như vậy. Nhiều lệnh gọi hàm trên các số nguyên đó có thể được tối ưu hóa thành một tập hợp nhỏ các phép toán "ma thuật" và một số hàm thậm chí có thể được tối ưu hóa để tra cứu bảng.
Vì vậy, có thể nói với trình biên dịch rằng điều này int
luôn nằm trong phạm vi nhỏ đó và liệu trình biên dịch có thể thực hiện những tối ưu hóa đó không?
unsigned
các loại vì chúng dễ dàng hơn cho trình biên dịch.
var value: 0..36;
.
int
và cũng unsigned int
cần được ký hiệu hoặc mở rộng từ 32 đến 64 bit, trên hầu hết các hệ thống có con trỏ 64 bit. Lưu ý rằng trên x86-64, các thao tác trên các thanh ghi 32 bit không mở rộng thành 64 bit miễn phí (không phải ký hiệu mở rộng, nhưng tràn ký hiệu là hành vi không xác định, do đó trình biên dịch chỉ có thể sử dụng toán học có chữ ký 64 bit nếu muốn). Vì vậy, bạn chỉ thấy các hướng dẫn bổ sung cho hàm 32 bit không mở rộng, không phải là kết quả tính toán. Bạn sẽ cho các loại không dấu hẹp hơn.