2010-12-28 39 views
9

Tại sao 0x1p3 bằng 8.0? Tại sao 0x1e3 bằng 483, trong khi 0x1e3d bằng 7741? Nó gây nhầm lẫn kể từ 1e3d bằng 1000.0.Các số dấu chấm động Java đại diện dưới dạng số thập lục phân

+2

Tại sao 'p' trong' 0x1p3'? – marcog

+0

@marcog đây là một phần của cách thể hiện số dấu phẩy động, xem JLS: http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.2 – Jesper

+0

@marcog: đó là điểm đánh dấu số mũ cho một chữ số thập lục phân dấu chấm động, như được định nghĩa trong các tiêu chuẩn Java và C99. –

Trả lời

7

0x1e30x1e3d là hệ thập lục phân nguyên literals. Lưu ý rằng ed là các chữ số thập lục phân, không phải chỉ báo số mũ hoặc chỉ báo loại double trong trường hợp này.

1e3d là số thập phân dấu phẩy động chữ. e là chỉ báo số mũ, số d cho biết đây là số double thay vì float.

Ký hiệu 0x1p3 là cách để diễn tả một dấu phẩy động theo thứ tự thập lục phân, như bạn có thể đọc trong section 3.10.2 của Đặc tả ngôn ngữ Java. Nó có nghĩa là 1 lần 2 đến sức mạnh 3; số mũ là nhị phân (vì vậy, nó là 2-to-the-power thay vì 10-to-the-power).

+0

Nhưng 0x1p3 phải giống như 1e3 trong trường hợp này, phải không? Nhưng họ thì không. – serious

+0

@ serious Không, bởi vì số mũ là số nhị phân, không phải là số thập phân. Của nó 2^3 không 10^3. – Jesper

+0

Ồ, hiểu rồi. – serious

2

0x1e3 là hex cho 483, như là hex 0x1e3d cho 7741. Các e đang được đọc như một chữ số hex với giá trị 14.

+1

Ah, 0x1e3 là số hex, do đó, "e" không có nghĩa là số mũ ở đây. – serious

+0

Nhưng 0x1p3 vẫn chưa rõ ràng. – serious

+1

@ serious, sự khác biệt là 0x1e3 là số nguyên, không phải là số dấu phẩy động. Chữ 'e' trong số nguyên đó chỉ là một sự trùng hợp ngẫu nhiên gây nhầm lẫn. 0x1p3 là một số dấu chấm động. Nó được hiểu _very_ khác nhau. Cách giải thích bao gồm _mantissa_ và _exponent_. Phần trước là phần 1.0 (lưu ý điểm thập phân giả định). Phần sau là phần 'p3' mà đọc 'thành lũy thừa thứ 3'. Vì chúng ta đang ở dạng nhị phân, lấy một số tới lũy thừa thứ 3 giống như dịch chuyển nó 3 bit sang bên trái, do đó 0b1 trở thành 0b1000. Đó là 8 thập phân. –

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