Trong hệ thập lục phân 1065353216 là 0x3F800000. Nếu bạn hiểu đó là số dấu phẩy động 32 bit bạn nhận được 1.0. Nếu bạn viết nó ra trong hệ nhị phân bạn có được điều này:
3 F 8 0 0 0 0 0
0011 1111 1000 0000 0000 0000 0000 0000
Hoặc nhóm khác nhau:
0 01111111 00000000000000000000000
s eeeeeeee vvvvvvvvvvvvvvvvvvvvvvv
Các bit đầu tiên (s
) là bit dấu, 8 bit tiếp theo (e
) là số mũ và 23 bit cuối cùng (v
) là những điều có nghĩa. "Số mũ dấu chấm động nhị phân chính xác đơn được mã hóa bằng cách sử dụng biểu diễn nhị phân bù trừ, với chênh lệch bằng không là 127; còn được gọi là độ lệch số mũ trong IEEE 754 standard." Giải thích điều này bạn thấy rằng dấu là 0 (dương), số mũ là 0 (01111111 b = 127, "số không bù"), và mức độ là 0. Điều này cho bạn +0 là 1,0.
Nhưng dù sao, điều đang xảy ra là bạn đang tham chiếu đến một phao (b
) và diễn giải lại nó dưới dạng tham chiếu int (int&)
. Vì vậy, khi bạn đọc giá trị của j
bạn nhận được các bit từ b
. Hiểu như là một phao những bit có nghĩa là 1.0, nhưng hiểu là một int những bit có nghĩa là 1065353216.
Đối với những gì nó có giá trị, tôi chưa bao giờ sử dụng một dàn diễn viên sử dụng &
như (int&)
. Tôi sẽ không mong đợi để nhìn thấy điều này hoặc sử dụng điều này trong bất kỳ mã C + + bình thường.
Nguồn
2009-10-13 16:25:01
Vâng, Đó là một câu trả lời tuyệt vời. Nhưng tôi có thêm một câu hỏi nữa. Tại sao lỗi "lỗi: static_cast không hợp lệ từ loại‘ float ’để nhập‘ int & ’”, xảy ra khi tôi sử dụng static_cast để truyền float tới int & like "float b = 1.0f; int & j = static_cast b;". Tôi không tìm thấy những hạn chế của static_cast trong cuốn sách C++ ưa thích của tôi, "Ngôn ngữ lập trình C++". –
toby
Đó là sự bảo vệ bạn nhận được từ việc sử dụng phôi kiểu C++. Nếu trình biên dịch chấp nhận một cơ hội static_cast thì bạn không làm gì sai. Những thứ không an toàn duy nhất mà một diễn viên tĩnh cho phép bạn làm là chuyển đổi không được kiểm soát từ Base */Base & thành Derived */Derived & và void * thành T * theo như tôi có thể nhớ. Về cơ bản, nó có thể đảo ngược chuyển đổi tiềm ẩn, không nhiều hơn - không tính các chuyển đổi const. – sellibitze
Xin chào, sellibitze, cảm ơn sự giúp đỡ của bạn! Tôi đạt được rồi! – toby