К сожалению, байт-код dalvik не делает различий между целочисленными типами (short / integer / long / etc.) И типами с плавающей запятой (float / double). Таким образом, baksmali не может знать, показывать ли такую константу в виде числа с плавающей запятой или целого числа, поэтому по умолчанию это просто целое число.
Это еще более осложняется существованием инструкций, подобных той, которую вы упомянули. Со страницы dalvik-bytecode из документации dalvik :
"Переместить заданное литеральное значение (с расширением вправо от нуля до 64 бит) в указанную пару регистров.".
Таким образом, эта инструкция фактически загрузит значение 0x4014000000000000 в регистры v0 и v1. Это стандартное 64-битное представление IEEE-754 с плавающей запятой. Первый (самый значимый) бит - это знаковый бит, следующие 11 бит - это показатель степени (основание 2), а последние 52 бита - это мантисса. В этом случае у нас есть двоичное представление
0100000000010100000000000000000000000000000000000000000000000000
SEEEEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
Для знакового бита 0 положительно, а 1 отрицательно.
Для показателя степени вы берете целочисленное значение из 11 битов (в данном случае 1025) и вычитаете 1023 для показателя степени 2.
А для мантиссы подразумевается "1" спереди, в месте 2 ^ 0, причем следующие цифры - это обычные 2 ^ -1, 2 ^ -2 и т. Д. Так что в этом случае, у нас есть двоичное число 1,01 или 1 * 2 ^ 0 + 1 * 2 ^ -2 или 1,25.
Общая форма расчета, используемая для значения,
-1 ^ (2 + S) * M * 2 ^ E
Где S, M и E - знак, мантисса и показатель степени.
В этом случае мы имеем
-1 ^ (2 + 0) * 1,25 * 2 ^ 2 = 1 * 1,25 * 4 = 5
Если вы не хотите каждый раз выполнять этот расчет вручную, существуют различные онлайн-калькуляторы, которые могут сделать это для вас. http://babbage.cs.qc.edu/IEEE-754/64bit.html кажется одним из лучших.