在C编程中,奇数字节除以0的结果

我正在研究IEEE 754,该标准规定了4种类型的浮点数:格式化的,未格式化的,无穷大和NAN。在我的C程序中,我测试除以0会发生什么并输出结果的字节:

#include<stdio.h>

void show_bytes();

int main()
{
    float n = 2.5/0;
    char* p = (char*)&n;
    int len = sizeof(n);
    printf("%d\n", len);
    show_bytes(p, len);
    printf("\n");
}

void show_bytes(char* p, int len)
{
    for(int i = 0; i < len; ++i)
    {   
        printf("%.2x\t", *p);
        ++p;    
    }   
}

但是结果是

4
00  00  ffffff80    7f

我不明白为什么在第三个字节位置有四个字节。 sizeof(n)== 4,但是打印字节的长度为7。

CPU信息

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 142
Model name:            Intel(R) Celeron(R) CPU 3865U @ 1.80GHz
Stepping:              9
CPU MHz:               1099.951
CPU max MHz:           1800.0000
CPU min MHz:           400.0000
BogoMIPS:              3600.00
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              2048K
NUMA node0 CPU(s):     0,1

GCC版本:gcc版本4.8.5 20150623(Red Hat 4.8.5-39)(GCC)

评论