float内存存储采用IEEE754,小端机器上可用此结构体访问:
struct Float { union { struct { unsigned int Mantissa : 23; unsigned int Exponent : 8; unsigned int Sign : 1; }; struct { unsigned int withoutSign : 31; unsigned int : 1; }; int _memoryInt = 0; float _float; }; };float x = 1.0f;
Float& f = (Float&)x;
f.Mantissa = ....;
将为了查看整个float内存值定义域及对应浮点值,给人留下直观的印象,这里编写代码如下: std::vector<float> data; float v; (int&)v = 0; for (; (int&)v != 0xFFFFFFFF; ) { if (-8.5070591730e+37 <= v && v <= -8.00000000f) ; else if (8.00000000f <= v && v <= 8.5070591730e+37) ; else if (-0.0625000000f <= v && v <= -2.35098898e-38f) ; else if (2.35098898e-38f <= v && v <= 0.0625000000f) ; else data.push_back(v); if (0x7F800000 < (int&)v && (int&)v < 0x7FFFFFFF) (int&)v = 0x7FFFFFFF; else if (0xFF800000 < (int&)v && (int&)v < 0xFFFFFFFF) (int&)v = 0xFFFFFFFF; else if (((int&)v & 0x7FFFFF) == 1 && (int&)v != 0xFF800001) (int&)v += 0x7FFFFE; else (int&)v += 1; } data.push_back(v); std::sort(data.begin(), data.end(), // [](float& a, float& b) { return a < b; }); [](float a, float b) { bool isnanA = isnan(a), isnanB = isnan(b); if (isnanA || isnanB) { if (!isnanB) { return ((int&)a & 0x80000000) != 0; } if (!isnanA) { return ((int&)b & 0x80000000) == 0; } if (((int&)a < 0) != ((int&)b < 0)) return (int&)a < (int&)b; else //两nan符号相同 return (((int&)a & 0x7FFFFF) < ((int&)b & 0x7FFFFF)) != ((int&)a < 0); } if ((int&)a == (int&)b) return false; else if (a < b) return true; else if (b < a) return false; else return (int&)a < (int&)b; }); int i = 0; for (float& f : data) { printf("序号= 内存值x 阶= 浮点值g 科学.10e\n", ++i, (int&)f, ((int&)f & 0x7F800000) >> 23, f, f); } 序号 1 内存值ffffffff 阶255 浮点值 -nan 科学 -nan 序号 2 内存值ff800001 阶255 浮点值 -nan 科学 -nan 序号 3 内存值ff800000 阶255 浮点值 -inf 科学 -inf 序号 4 内存值ff7fffff 阶254 浮点值 -3.40282e+38 科学-3.4028234664e+38 序号 5 内存值ff000001 阶254 浮点值 -1.70141e+38 科学-1.7014120374e+38 序号 6 内存值ff000000 阶254 浮点值 -1.70141e+38 科学-1.7014118346e+38 序号 7 内存值feffffff 阶253 浮点值 -1.70141e+38 科学-1.7014117332e+38 序号 8 内存值fe800001 阶253 浮点值 -8.50706e+37 科学-8.5070601871e+37 序号 9 内存值fe800000 阶253 浮点值 -8.50706e+37 科学-8.5070591730e+37 序号 10 内存值c0ffffff 阶129 浮点值 -8 科学-7.9999995232e+00 序号 11 内存值c0800001 阶129 浮点值 -4 科学-4.0000004768e+00 序号 12 内存值c0800000 阶129 浮点值 -4 科学-4.0000000000e+00 序号 13 内存值c07fffff 阶128 浮点值 -4 科学-3.9999997616e+00 序号 14 内存值c0000001 阶128 浮点值 -2 科学-2.0000002384e+00 序号 15 内存值c0000000 阶128 浮点值 -2 科学-2.0000000000e+00 序号 16 内存值bfffffff 阶127 浮点值 -2 科学-1.9999998808e+00 序号 17 内存值bf800001 阶127 浮点值 -1 科学-1.0000001192e+00 序号 18 内存值bf800000 阶127 浮点值 -1 科学-1.0000000000e+00 序号 19 内存值bf7fffff 阶126 浮点值 -1 科学-9.9999994040e-01 序号 20 内存值bf000001 阶126 浮点值 -0.5 科学-5.0000005960e-01 序号 21 内存值bf000000 阶126 浮点值 -0.5 科学-5.0000000000e-01 序号 22 内存值beffffff 阶125 浮点值 -0.5 科学-4.9999997020e-01 序号 23 内存值be800001 阶125 浮点值 -0.25 科学-2.5000002980e-01 序号 24 内存值be800000 阶125 浮点值 -0.25 科学-2.5000000000e-01 序号 25 内存值be7fffff 阶124 浮点值 -0.25 科学-2.4999998510e-01 序号 26 内存值be000001 阶124 浮点值 -0.125 科学-1.2500001490e-01 序号 27 内存值be000000 阶124 浮点值 -0.125 科学-1.2500000000e-01 序号 28 内存值bdffffff 阶123 浮点值 -0.125 科学-1.2499999255e-01 序号 29 内存值bd800001 阶123 浮点值 -0.0625 科学-6.2500007451e-02 序号 30 内存值81000000 阶 2 浮点值 -2.35099e-38 科学-2.3509887016e-38 序号 31 内存值80ffffff 阶 1 浮点值 -2.35099e-38 科学-2.3509885615e-38 序号 32 内存值80800001 阶 1 浮点值 -1.17549e-38 科学-1.1754944910e-38 序号 33 内存值80800000 阶 1 浮点值 -1.17549e-38 科学-1.1754943508e-38 序号 34 内存值807fffff 阶 0 浮点值 -1.17549e-38 科学-1.1754942107e-38 序号 35 内存值80000001 阶 0 浮点值 -1.4013e-45 科学-1.4012984643e-45 序号 36 内存值80000000 阶 0 浮点值 -0 科学-0.0000000000e+00 序号 37 内存值00000000 阶 0 浮点值 0 科学 0.0000000000e+00 序号 38 内存值00000001 阶 0 浮点值 1.4013e-45 科学 1.4012984643e-45 序号 39 内存值007fffff 阶 0 浮点值 1.17549e-38 科学 1.1754942107e-38 序号 40 内存值00800000 阶 1 浮点值 1.17549e-38 科学 1.1754943508e-38 序号 41 内存值00800001 阶 1 浮点值 1.17549e-38 科学 1.1754944910e-38 序号 42 内存值00ffffff 阶 1 浮点值 2.35099e-38 科学 2.3509885615e-38 序号 43 内存值01000000 阶 2 浮点值 2.35099e-38 科学 2.3509887016e-38 序号 44 内存值3d800001 阶123 浮点值 0.0625 科学 6.2500007451e-02 序号 45 内存值3dffffff 阶123 浮点值 0.125 科学 1.2499999255e-01 序号 46 内存值3e000000 阶124 浮点值 0.125 科学 1.2500000000e-01 序号 47 内存值3e000001 阶124 浮点值 0.125 科学 1.2500001490e-01 序号 48 内存值3e7fffff 阶124 浮点值 0.25 科学 2.4999998510e-01 序号 49 内存值3e800000 阶125 浮点值 0.25 科学 2.5000000000e-01 序号 50 内存值3e800001 阶125 浮点值 0.25 科学 2.5000002980e-01 序号 51 内存值3effffff 阶125 浮点值 0.5 科学 4.9999997020e-01 序号 52 内存值3f000000 阶126 浮点值 0.5 科学 5.0000000000e-01 序号 53 内存值3f000001 阶126 浮点值 0.5 科学 5.0000005960e-01 序号 54 内存值3f7fffff 阶126 浮点值 1 科学 9.9999994040e-01 序号 55 内存值3f800000 阶127 浮点值 1 科学 1.0000000000e+00 序号 56 内存值3f800001 阶127 浮点值 1 科学 1.0000001192e+00 序号 57 内存值3fffffff 阶127 浮点值 2 科学 1.9999998808e+00 序号 58 内存值40000000 阶128 浮点值 2 科学 2.0000000000e+00 序号 59 内存值40000001 阶128 浮点值 2 科学 2.0000002384e+00 序号 60 内存值407fffff 阶128 浮点值 4 科学 3.9999997616e+00 序号 61 内存值40800000 阶129 浮点值 4 科学 4.0000000000e+00 序号 62 内存值40800001 阶129 浮点值 4 科学 4.0000004768e+00 序号 63 内存值40ffffff 阶129 浮点值 8 科学 7.9999995232e+00 序号 64 内存值7e800000 阶253 浮点值 8.50706e+37 科学 8.5070591730e+37 序号 65 内存值7e800001 阶253 浮点值 8.50706e+37 科学 8.5070601871e+37 序号 66 内存值7effffff 阶253 浮点值 1.70141e+38 科学 1.7014117332e+38 序号 67 内存值7f000000 阶254 浮点值 1.70141e+38 科学 1.7014118346e+38 序号 68 内存值7f000001 阶254 浮点值 1.70141e+38 科学 1.7014120374e+38 序号 69 内存值7f7fffff 阶254 浮点值 3.40282e+38 科学 3.4028234664e+38 序号 70 内存值7f800000 阶255 浮点值 inf 科学 inf 序号 71 内存值7f800001 阶255 浮点值 nan 科学 nan 序号 72 内存值7fffffff 阶255 浮点值 nan 科学 nan 另外重新按内存值排序得到如下输出 序号 1 内存值80000000 阶 0 浮点值 -0 科学-0.0000000000e+00 序号 2 内存值80000001 阶 0 浮点值 -1.4013e-45 科学-1.4012984643e-45 序号 3 内存值807fffff 阶 0 浮点值 -1.17549e-38 科学-1.1754942107e-38 序号 4 内存值80800000 阶 1 浮点值 -1.17549e-38 科学-1.1754943508e-38 序号 5 内存值80800001 阶 1 浮点值 -1.17549e-38 科学-1.1754944910e-38 序号 6 内存值80ffffff 阶 1 浮点值 -2.35099e-38 科学-2.3509885615e-38 序号 7 内存值81000000 阶 2 浮点值 -2.35099e-38 科学-2.3509887016e-38 序号 8 内存值bd800001 阶123 浮点值 -0.0625 科学-6.2500007451e-02 序号 9 内存值bdffffff 阶123 浮点值 -0.125 科学-1.2499999255e-01 序号 10 内存值be000000 阶124 浮点值 -0.125 科学-1.2500000000e-01 序号 11 内存值be000001 阶124 浮点值 -0.125 科学-1.2500001490e-01 序号 12 内存值be7fffff 阶124 浮点值 -0.25 科学-2.4999998510e-01 序号 13 内存值be800000 阶125 浮点值 -0.25 科学-2.5000000000e-01 序号 14 内存值be800001 阶125 浮点值 -0.25 科学-2.5000002980e-01 序号 15 内存值beffffff 阶125 浮点值 -0.5 科学-4.9999997020e-01 序号 16 内存值bf000000 阶126 浮点值 -0.5 科学-5.0000000000e-01 序号 17 内存值bf000001 阶126 浮点值 -0.5 科学-5.0000005960e-01 序号 18 内存值bf7fffff 阶126 浮点值 -1 科学-9.9999994040e-01 序号 19 内存值bf800000 阶127 浮点值 -1 科学-1.0000000000e+00 序号 20 内存值bf800001 阶127 浮点值 -1 科学-1.0000001192e+00 序号 21 内存值bfffffff 阶127 浮点值 -2 科学-1.9999998808e+00 序号 22 内存值c0000000 阶128 浮点值 -2 科学-2.0000000000e+00 序号 23 内存值c0000001 阶128 浮点值 -2 科学-2.0000002384e+00 序号 24 内存值c07fffff 阶128 浮点值 -4 科学-3.9999997616e+00 序号 25 内存值c0800000 阶129 浮点值 -4 科学-4.0000000000e+00 序号 26 内存值c0800001 阶129 浮点值 -4 科学-4.0000004768e+00 序号 27 内存值c0ffffff 阶129 浮点值 -8 科学-7.9999995232e+00 序号 28 内存值fe800000 阶253 浮点值 -8.50706e+37 科学-8.5070591730e+37 序号 29 内存值fe800001 阶253 浮点值 -8.50706e+37 科学-8.5070601871e+37 序号 30 内存值feffffff 阶253 浮点值 -1.70141e+38 科学-1.7014117332e+38 序号 31 内存值ff000000 阶254 浮点值 -1.70141e+38 科学-1.7014118346e+38 序号 32 内存值ff000001 阶254 浮点值 -1.70141e+38 科学-1.7014120374e+38 序号 33 内存值ff7fffff 阶254 浮点值 -3.40282e+38 科学-3.4028234664e+38 序号 34 内存值ff800000 阶255 浮点值 -inf 科学 -inf 序号 35 内存值ff800001 阶255 浮点值 -nan 科学 -nan 序号 36 内存值ffffffff 阶255 浮点值 -nan 科学 -nan 序号 37 内存值00000000 阶 0 浮点值 0 科学 0.0000000000e+00 序号 38 内存值00000001 阶 0 浮点值 1.4013e-45 科学 1.4012984643e-45 序号 39 内存值007fffff 阶 0 浮点值 1.17549e-38 科学 1.1754942107e-38 序号 40 内存值00800000 阶 1 浮点值 1.17549e-38 科学 1.1754943508e-38 序号 41 内存值00800001 阶 1 浮点值 1.17549e-38 科学 1.1754944910e-38 序号 42 内存值00ffffff 阶 1 浮点值 2.35099e-38 科学 2.3509885615e-38 序号 43 内存值01000000 阶 2 浮点值 2.35099e-38 科学 2.3509887016e-38 序号 44 内存值3d800001 阶123 浮点值 0.0625 科学 6.2500007451e-02 序号 45 内存值3dffffff 阶123 浮点值 0.125 科学 1.2499999255e-01 序号 46 内存值3e000000 阶124 浮点值 0.125 科学 1.2500000000e-01 序号 47 内存值3e000001 阶124 浮点值 0.125 科学 1.2500001490e-01 序号 48 内存值3e7fffff 阶124 浮点值 0.25 科学 2.4999998510e-01 序号 49 内存值3e800000 阶125 浮点值 0.25 科学 2.5000000000e-01 序号 50 内存值3e800001 阶125 浮点值 0.25 科学 2.5000002980e-01 序号 51 内存值3effffff 阶125 浮点值 0.5 科学 4.9999997020e-01 序号 52 内存值3f000000 阶126 浮点值 0.5 科学 5.0000000000e-01 序号 53 内存值3f000001 阶126 浮点值 0.5 科学 5.0000005960e-01 序号 54 内存值3f7fffff 阶126 浮点值 1 科学 9.9999994040e-01 序号 55 内存值3f800000 阶127 浮点值 1 科学 1.0000000000e+00 序号 56 内存值3f800001 阶127 浮点值 1 科学 1.0000001192e+00 序号 57 内存值3fffffff 阶127 浮点值 2 科学 1.9999998808e+00 序号 58 内存值40000000 阶128 浮点值 2 科学 2.0000000000e+00 序号 59 内存值40000001 阶128 浮点值 2 科学 2.0000002384e+00 序号 60 内存值407fffff 阶128 浮点值 4 科学 3.9999997616e+00 序号 61 内存值40800000 阶129 浮点值 4 科学 4.0000000000e+00 序号 62 内存值40800001 阶129 浮点值 4 科学 4.0000004768e+00 序号 63 内存值40ffffff 阶129 浮点值 8 科学 7.9999995232e+00 序号 64 内存值7e800000 阶253 浮点值 8.50706e+37 科学 8.5070591730e+37 序号 65 内存值7e800001 阶253 浮点值 8.50706e+37 科学 8.5070601871e+37 序号 66 内存值7effffff 阶253 浮点值 1.70141e+38 科学 1.7014117332e+38 序号 67 内存值7f000000 阶254 浮点值 1.70141e+38 科学 1.7014118346e+38 序号 68 内存值7f000001 阶254 浮点值 1.70141e+38 科学 1.7014120374e+38 序号 69 内存值7f7fffff 阶254 浮点值 3.40282e+38 科学 3.4028234664e+38 序号 70 内存值7f800000 阶255 浮点值 inf 科学 inf 序号 71 内存值7f800001 阶255 浮点值 nan 科学 nan 序号 72 内存值7fffffff 阶255 浮点值 nan 科学 nan
