2014-06-18 23 views
5

Tôi đang học về các ngôn ngữ lập trình ngay bây giờ (BNFs, máy quét, v.v ...) và có vẻ lạ rằng hằng số dấu phẩy động thập lục phân trong C yêu cầu số mũ.Tại sao dấu phẩy thập lục phân cần phải có số mũ được chỉ định?

Từ tiêu chuẩn C99,

§6.4.4.2 hằng Floating

hexadecimal-floating-constant: 
    hexadecimal-prefix hexadecimal-fractional-constant 
     binary-exponent-part floating-suffix[opt] 
    hexadecimal-prefix hexadecimal-digit-sequence 
     binary-exponent-part floating-suffix[opt] 

Có vẻ như dễ dàng để viết một máy quét mà sẽ phân tích hằng điểm hexadecimal nổi với một số mũ không bắt buộc. Tại sao tiêu chuẩn C làm cho số mũ tùy chọn cho các dấu phảy động thập phân và được yêu cầu cho các dấu phảy động hex?

Trả lời

7

này được bao phủ trong C99 Rationale, phần 6.4.4.2:

Một tính năng mới của C99: C99 thêm ký hiệu thập lục phân vì nó nhiều hơn thể hiện rõ ý nghĩa của hằng số nổi. Cần có phần số mũ nhị phân , thay vì tùy chọn vì nó là ký hiệu thập phân , để tránh sự mơ hồ do hậu tố f là bị nhầm lẫn dưới dạng chữ số thập lục phân.

Ví dụ, 1.0f là một số thập phân dấu chấm động liên tục của loại float, nhưng 0x1.0f sẽ là mơ hồ, và phải được viết như 0x1.0p0f.

Đối với lý do tương tự, số mũ được giới thiệu bởi p hơn ee là một chữ số thập lục phân hợp lệ.

Các vấn đề liên quan