z.s={'3','4','j','k'};
назначит один массив другому. C не позволяет этого, хотя вы можете объявить второй и memcpy
для первого.
Наибольшее конечное значение, которое может хранить число с плавающей запятой одинарной точности IEEE, составляет 3,4028234 × 10^38, поэтому 283135145630880207619489792,000000, что приблизительно равно 2,8313514 × 10^26, определенно находится в диапазоне.
Предполагая, что ваши символы в остальном верны, рефлекторная догадка будет заключаться в том, что вы ошиблись с порядком байтов.
РЕДАКТИРОВАТЬ: 34jk, если брать слева направо, как на машине с прямым порядком байтов:
0x33 0x34 0x6a 0x6b
= 0011 0011, 0011 0100, 0110 1010, 0110 1011
So:
sign = 0
exponent = 011 0011 0 = 102 (dec), or -25 allowing for offset encoding
mantissa = [1] 011 0100 0110 1010 0110 1011 = 11823723 / (2^23)
Таким образом, значение будет примерно 4,2 × 10 ^ -8, что вам и нужно.
С прямым порядком байтов:
0x6b 0x6a 0x34 0x33
= 0110 1011, 0110 1010, 0011 0100, 0011 0011
sign = 0
exponent = 110 1011 0 = 214 (dec) => 87
mantissa = [1]110 1010 0011 0100 0011 0011 = 15348787 / (2^23)
Таким образом, значение будет около 2,8 * 10 ^ 26, что и выводит ваша программа. Это безопасный вывод, что вы находитесь на машине с прямым порядком байтов.
Резюме: порядок байтов на разных машинах разный. Вы хотите использовать свои байты наоборот — попробуйте kj43
.
person
Tommy
schedule
18.08.2012