z.s={'3','4','j','k'};
ще присвои един масив на друг. C не позволява това, въпреки че можете да декларирате второто и memcpy
към първото.
Най-голямата крайна стойност, която IEEE float с единична точност може да съхрани, е 3,4028234 × 10^38, така че 283135145630880207619489792,000000, което е приблизително 2,8313514 × 10^26, определено е в диапазона.
Ако приемем, че вашите знаци иначе са правилни, предположението на колене би било, че сте сбъркали endianity.
РЕДАКТИРАНЕ: 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, което е, което искате.
В Little Endian:
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