Vì cả hai toán hạng của bạn là số nguyên, trình biên dịch thực hiện phân chia số nguyên tính toán phần thập phân). Nếu ít nhất một trong các toán hạng là một loại dấu phẩy động (như trong các ví dụ khác của bạn) thì một toán tử khác được thăng cấp và một phân chia dấu phẩy động được thực hiện.
Việc sửa chữa
Make ít nhất một trong các toán hạng của một loại dấu chấm động (double
hoặc float
); bạn có thể làm ví dụ này .:
- làm cho nó một
double
đen (60
là số nguyên, hoặc thậm chí 60.0
60.
là double
, 60.f
là float
)
- sử dụng một dàn diễn viên (
double(60)
, (double)60
).
Cá nhân tôi thích sử dụng trực tiếp double
literals - không phải là các diễn viên có bất kỳ hình phạt hiệu suất trên các trình biên dịch nửa phong nha, nhưng nó cảm thấy "sai" và tiết đối với chỉ sử dụng một đen của đúng loại. (Rõ ràng là khi cả hai toán hạng là các biến và không literals bạn có sử dụng các diễn viên)
phản đối Common
"nhưng tôi gán nó vào một double
! "
Nhiều người mới đang nhầm lẫn bởi thực tế này, vì họ nghĩ rằng gán kết quả vào một double
nên có một số loại gợi ý để trình biên dịch. Trong thực tế, nó không phải.
Tính toán/quảng cáo được thực hiện vào biểu thức là hoàn toàn độc lập từ loại đích đến, đây chỉ là bước cuối cùng. Các biểu thức con được đánh giá cho chúng là gì, không quan tâm đến kết quả sẽ được sử dụng như thế nào, vì vậy tất cả các loại chương trình khuyến mãi/hoạt động chỉ phụ thuộc vào loại toán hạng.
tại sao một người muốn chia số nguyên?
Một số ngôn ngữ tự động thực hiện phân chia điểm nổi ngay cả khi đối số là cả hai số nguyên (ví dụ: VB6, IIRC), vì nó cảm thấy trực quan hơn cho người mới. Điều đó không giống như vậy trong C/C++: phân chia là không thể tách rời khi các đối số là số nguyên, vì trong nhiều trường hợp bạn không quan tâm đến số thập phân, và/hoặc nó thích hợp hơn vì lý do hiệu suất không sử dụng FPU (triết lý nền) trong C và C++ là "bạn không trả tiền cho những gì bạn không sử dụng"). Rõ ràng vấn đề có thể đã được giải quyết bằng cách sử dụng một toán tử riêng biệt cho bộ phận tách rời (VB, một lần nữa, sử dụng \
), nhưng IMHO chúng ta có đủ toán tử trong C++ vì nó. :) góc
- Nitpickers': yes, đây thực sự nó là một khởi, không phải là một nhiệm vụ, nhưng chúng ta đang nói về cùng một loại quan niệm sai lầm.
- "chữ" là giá trị được bao gồm trong mã nguồn.
Nguồn
2012-10-31 18:00:26
Nói xin chào cắt ngắn số nguyên. – chris
@chris: quá nhanh! – Yamaneko
@VictorHugo, loại tiêu đề đã cho nó đi. Tất nhiên điều đó có nghĩa là nó là một tiêu đề cực kỳ hay. – chris