почему порядковый номер имеет значение среди битов внутри байта?

Ниже приведена структура IP из библиотеки на компьютере с Linux.

   struct ip
      {
    #if __BYTE_ORDER == __LITTLE_ENDIAN
        unsigned int ip_hl:4;               /* header length */
        unsigned int ip_v:4;                /* version */
    #endif
    #if __BYTE_ORDER == __BIG_ENDIAN
        unsigned int ip_v:4;                /* version */
        unsigned int ip_hl:4;               /* header length */
    #endif
        u_int8_t ip_tos;                    /* type of service */
        u_short ip_len;                     /* total length */
        u_short ip_id;                      /* identification */
        u_short ip_off;                     /* fragment offset field */
    #define IP_RF 0x8000                    /* reserved fragment flag */
    #define IP_DF 0x4000                    /* dont fragment flag */
    #define IP_MF 0x2000                    /* more fragments flag */
    #define IP_OFFMASK 0x1fff               /* mask for fragmenting bits */
        u_int8_t ip_ttl;                    /* time to live */
        u_int8_t ip_p;                      /* protocol */
        u_short ip_sum;                     /* checksum */
        struct in_addr ip_src, ip_dst;      /* source and dest address */
      };

для этих строк:

    #if __BYTE_ORDER == __LITTLE_ENDIAN
        unsigned int ip_hl:4;               /* header length */
        unsigned int ip_v:4;                /* version */
    #endif
    #if __BYTE_ORDER == __BIG_ENDIAN
        unsigned int ip_v:4;                /* version */
        unsigned int ip_hl:4;               /* header length */
    #endif

почему значение байтов в байте имеет значение? Я думаю, что endianess влияют только на многобайтовые целые числа, но здесь мне кажется, что endianess также влияет на расположение битов внутри байта?

кроме того, это только байт, почему этоunsigned int, что составляет 4 байта.

Я замечаю в Wireshark, ip_v и ip_hl отображается как0x45 Если я перехватить IP-пакет. Первый байт состоит из ip_v и ip_hl, я поместил его в символьную переменнуюx

тогда каков результатx & 0b11110000 ? всегда ли 4 не имеет значения, что такое endianess, или это может быть 5?

Ответы на вопрос(2)

Ваш ответ на вопрос