2012-03-25 27 views

Trả lời

6

%f đang tìm kiếm hình nổi, không phải gấp đôi. Nếu bạn muốn sử dụng đôi, hãy sử dụng định dạng %lf.

Như một phần thú vị sang một bên, clang cảnh báo về điều này mà không có bất kỳ cờ bổ sung nào, gcc 4.6 sẽ không cảnh báo về nó ngay cả với -Wall -Wextra -pedantic.

+0

May mắn thay GCC 5.2.1-22ubuntu2 than phiền mà không có bất kỳ đối số nào –

4

%f có nghĩa là cho một single precision floating-point value (phao). Định dạng thông số bạn cần là %lf, có nghĩa là long precision floating-point value (gấp đôi).

2

Tất cả về cách dữ liệu được lưu trữ trong bộ nhớ.
Hãy để tôi lần đầu tiên nói rằng thời gian và trôi nổi được lưu trữ trong bộ nhớ.

  • Một đôi (dài, 64 bit) được lưu trữ trong bộ nhớ như hoặc this (ký hiệu cuối).
  • Trường hợp như một phao (32 bit) được lưu trữ như this (ký hiệu cuối).
    Cũng có một cái nhìn tại này "en.wikipedia.org/wiki/Floating_point#Internal_representation" (tất cả các loại dữ liệu nổi)

Vì vậy, ở đây bạn đang yêu cầu để có đầu vào như %f (tức là float, đó là 4 byte nhưng đôi là 8 byte), do đó, trình biên dịch lấy đầu vào từ bảng điều khiển và chuyển đổi nó thành kiểu float và lưu nó ở vị trí bộ nhớ (thực tế là 8 byte) của biến (ở đây là n1).

+0

nhỏ endian và lớn endian http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html – Chokho

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