Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Medan bit dalam C

Medan bit dalam C

WBOY
WBOYke hadapan
2023-09-08 22:57:031404semak imbas

Medan bit dalam C

Dalam bahagian ini, kita akan memahami apa itu medan bit dalam bahasa C.

Andaikan program C anda mengandungi banyak pembolehubah BENAR/SALAH yang dikumpulkan dalam struktur yang dipanggil keadaan seperti berikut -

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

Struktur memerlukan 8 bit ruang memori, tetapi pada hakikatnya, kami akan menyimpan dalam setiap pembolehubah 0 atau 1. Dalam kes ini, bahasa pengaturcaraan C menyediakan cara yang lebih baik untuk menggunakan ruang memori.

Jika anda menggunakan pembolehubah sedemikian dalam struct, maka anda boleh menentukan lebar pembolehubah untuk memberitahu pengkompil C bahawa anda hanya menggunakan bilangan bit ini. Sebagai contoh, struktur di atas boleh ditulis semula seperti berikut -

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

Struktur di atas memerlukan 4 bit ruang memori untuk pembolehubah keadaan, tetapi hanya menggunakan 2 bit untuk menyimpan nilai.

Jika anda menggunakan sehingga 32 pembolehubah, setiap pembolehubah adalah 1 bit lebar, maka struktur status juga akan menggunakan 4 bit. Walau bagaimanapun, sebaik sahaja anda mempunyai 33 pembolehubah, ia memperuntukkan slot memori seterusnya dan mula menggunakan 8 bit. Mari kita semak contoh berikut untuk memahami konsep -

Kod Contoh

Demonstrasi Langsung

#include <stdio.h>
#include <string.h>
/* define simple structure */
struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status1;
/* define a structure with bit fields */
struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status2;
int main( ) {
   printf( "Memory size occupied by status1 : %d</p><p>", sizeof(status1));
   printf( "Memory size occupied by status2 : %d</p><p>", sizeof(status2));
   return 0;
}

Output

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

Pengisytiharan Bitfield:

Pengisytiharan medan bit mempunyai bentuk berikut di dalam struktur -

rreee berikut menggambarkan bit medan Elemen pembolehubah -

elemen penerangan jenis menentukan cara jenis integer nilai medan bit ditafsirkan. Jenis ini boleh menjadi int, int yang ditandatangani, atau int yang tidak ditandatangani. nama_ahliNama medan bit. LebarBilangan digit dalam medan bit. Lebar mestilah kurang daripada atau sama dengan lebar bit jenis yang ditentukan.
th>
Pembolehubah yang ditakrifkan dengan lebar yang dipratentukan dipanggil medan bit. Medan bit boleh menyimpan berbilang bit; contohnya, jika anda memerlukan pembolehubah untuk menyimpan nilai dari 0 hingga 7, maka anda boleh menentukan medan bit dengan lebar 3 bit seperti yang ditunjukkan di bawah -

struct {
   type [member_name] : width ;
};

Takrifan struktur di atas menunjukkan C pengkompil, pembolehubah umur hanya akan menggunakan 3 bit untuk menyimpan nilai. Jika anda cuba menggunakan lebih daripada 3 bit maka ia tidak akan membenarkan anda berbuat demikian. Mari cuba contoh berikut -

Kod Contoh

Demonstrasi Langsung

struct {
   unsigned int age : 3;
} Age;

Output

#include <stdio.h>
#include <string.h>
struct {
   unsigned int age : 3;
} Age;
int main( ) {
   Age.age = 4;
   printf( "Sizeof( Age ) : %d</p><p>", sizeof(Age) );
   printf( "Age.age : %d</p><p>", Age.age );
   Age.age = 7;
   printf( "Age.age : %d</p><p>", Age.age );
   Age.age = 8;
   printf( "Age.age : %d</p><p>", Age.age );
   return 0;
}

Atas ialah kandungan terperinci Medan bit dalam C. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam