Latest web development tutorials

bidang bit C

Jika struktur program berisi lebih dari satu-satunya BENAR / variabel SALAH digital, sebagai berikut:

struct
{
  unsigned int widthValidated;
  unsigned int heightValidated;
} status;

Konfigurasi ini membutuhkan 8 byte ruang memori, namun pada kenyataannya, di masing-masing variabel, kita hanya menyimpan 0 atau 1. Dalam hal ini, bahasa C menyediakan lebih baik menggunakan ruang memori di jalan. Jika Anda menggunakan variabel seperti dalam struktur, Anda dapat menentukan lebar variabel untuk memberitahu compiler bahwa Anda akan hanya menggunakan mereka byte. Misalnya, struktur di atas dapat ditulis ulang sebagai:

struct
{
  unsigned int widthValidated : 1;
  unsigned int heightValidated : 1;
} status;

Sekarang, struktur di atas, variabel Status menempati empat byte memori, tetapi hanya dua yang digunakan untuk menyimpan nilai-nilai. Jika Anda menggunakan 32 variabel, masing-masing lebar variabel dari satu, maka struktur status akan menggunakan 4 byte, tetapi lebih selama Anda menggunakan variabel, jika Anda menggunakan 33 variabel, itu akan berada di bawah bagian dari memori yang dialokasikan 33 variabel pertama disimpan, kali ini untuk mulai menggunakan 8 byte. Mari kita lihat contoh berikut untuk memahami konsep ini:

#include <stdio.h>
#include <string.h>

/* 定义简单的结构 */
struct
{
  unsigned int widthValidated;
  unsigned int heightValidated;
} status1;

/* 定义位域结构 */
struct
{
  unsigned int widthValidated : 1;
  unsigned int heightValidated : 1;
} status2;
 
int main( )
{
   printf( "Memory size occupied by status1 : %d\n", sizeof(status1));
   printf( "Memory size occupied by status2 : %d\n", sizeof(status2));

   return 0;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

deklarasi bidang bit

Di bidang bit struktur deklarasi adalah sebagai berikut:

struct
{
  type [member_name] : width ;
};

Berikut ini adalah deskripsi dari elemen variabel bit bidang:

元素描述
type整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。
member_name位域的名称。
width位域中位的数量。宽度必须小于或等于指定类型的位宽度。

Variabel dengan lebar yang telah ditetapkan disebutlapangan sedikit.sedikit bidang dapat menyimpan lebih dari satu nomor, misalnya, perlu variabel untuk menyimpan nilai dari 0 sampai 7, Anda dapat menentukan lebar tiga bidang bit sebagai berikut:

struct
{
  unsigned int age : 3;
} Age;

Definisi dari struktur di atas arah C compiler, usia hanya akan menggunakan tiga variabel untuk menyimpan nilai ini, jika Anda mencoba untuk menggunakan lebih dari tiga, Anda tidak bisa lengkap. Mari kita lihat contoh berikut:

#include <stdio.h>
#include <string.h>

struct
{
  unsigned int age : 3;
} Age;

int main( )
{
   Age.age = 4;
   printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
   printf( "Age.age : %d\n", Age.age );

   Age.age = 7;
   printf( "Age.age : %d\n", Age.age );

   Age.age = 8;
   printf( "Age.age : %d\n", Age.age );

   return 0;
}

Ketika kode di atas dikompilasi, akan membawa peringatan, ketika kode di atas dijalankan, maka akan menghasilkan hasil sebagai berikut:

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0