Red de conocimientos sobre prescripción popular - Remedios caseros - El problema de la definición de la posición de la estructura en lenguaje C

El problema de la definición de la posición de la estructura en lenguaje C

Según la definición del nombre, u unsigned?int?integer, number?8?16, representa cuántos bits de un entero,?

1 byte?uint8_t

2 bytes?uint16_t

4 bytes?uint32_t

8 bytes?uint64_t

Para obtener más información, consulte: blogs.com/baochun968/archive/ 2011/ 10/19/2218008.html

bit0: 1 Esta oración define un campo de bits, bit0 es el nombre de dominio del campo de bits y bit0 solo ocupa un bit.

El campo bit significa que cuando se almacena la información no es necesario que ocupe un byte completo, sino sólo unos pocos o un bit binario. Para ahorrar espacio de almacenamiento y facilitar el procesamiento, el lenguaje C proporciona una estructura de datos llamada "campo de bits" o "segmento de bits". El llamado "campo de bits" consiste en dividir los bits binarios de un byte en varias áreas diferentes y explicar el número de bits en cada área. Cada dominio tiene un nombre de dominio que permite operaciones por nombre de dominio en el programa. ?De esta manera se pueden representar varios objetos diferentes mediante un campo de bits binarios de un byte.

Referencia: /question/391684179.html

Entonces, en la estructura anterior, un atributo de elemento ocupa un bit, el primero tiene 2 bytes y el último también ocupa dos bytes. .

Básicamente no hay diferencia

Normalmente, puedes probar el código anterior de esta manera#includelt; stdio.hgt;

typedef unsigned short uint16_t;

typedef unsigned char uint8_t ;

estructura typedef

{

uint16_t bit0: 1;

uint16_t bit1:

uint16_t bit2: 1;

uint16_t bit3:

uint16_t bit4: 1

uint16_t bit5:

uint16_t bit6: 1;

uint16_t bit7:

uint16_t bit8: 1;

uint16_t bit9:

uint16_t bit10: 1;

uint16_t bit11:

uint16_t bit12: 1;

uint16_t bit13: 1;

p>

uint16_t bit15: 1;

}BITS161

estructura typedef

{

uint8_t bit0: 1;

uint8_t bit1:

uint8_t bit2: 1;

uint8_t bit3:

uint8_t; bit4: 1;

uint8_t bit5:

uint8_t bit6: 1;

uint8_t bit7:

uint8_t 1;

uint8_t bit9: 1;

uint8_t bit10: 1;

uint8_t bit11: 1;

uint8_t bit13: 1

uint8_t bit14:

uint8_t bit15:

}BITS162;

int main() {

printf("d, d", tamaño de (BITS161), tamaño de (BITS162));

devuelve 0; >}

La salida es 2, 2, lo que significa que la estructura es de dos bytes. Pero si typedef?unsigned?int?uint16_t?;? va a utilizar el entero habitual de 4 bytes para representar uint16_t?, la estructura anterior debe tener al menos una longitud int?, y la salida es 4, 2