Целое число 1
и с плавающей запятой 1.0f
может быть математически одним и тем же значением, но в C++ у них разные типы, с разными представлениями.
литье lvalue к ссылке равно reinterpret_cast
; он говорит: «Посмотрите, что находится в этой ячейке памяти, и интерпретируйте эти байты как int
».
В первом случае память содержит int
, поэтому интерпретация этих байтов как int
дает ожидаемое значение.
Во втором случае, память содержит float
, так что вы видите байты (или, возможно, только некоторые из них, или, возможно, дополнительных отражателей тоже, если sizeof(int) != sizeof(float)
), которые представляют собой число с плавающей точкой, переосмысленное как целое ,
Ваш компьютер, вероятно, использует 32-разрядные int
и 32-разрядные IEEEfloat
изображений. Значение float
1.0f
имеет знаковый бит нуля, показатель нуля (представленный 8-битовым значением 127 или 01111111 в двоичном формате), а мантисса 1 (представлена 23-битовым значением 0), поэтому 32 -битовый модель будет выглядеть следующим образом:
00111111 10000000 00000000 00000000
Когда переосмыслено как целое, это дает шестнадцатеричное значение 0x3f800000
, которое в десятичной системе счисления 1065353216.
Можете ли вы, пожалуйста, объяснить некоторые вещи в отношении вашего абзаца lasr. Я не знаю гораздо больше об этом материале мантиссы. Я новичок в C++. – Kenta
@vivek: Следуйте по [link] (http://en.wikipedia.org/wiki/IEEE_floating_point) статье Википедии о представлениях с плавающей запятой IEEE, которая объясняет их лучше, чем я могу. –
Thankx Mike Seymou .. – Kenta