Medan bit dalam C

WBOY
Lepaskan: 2023-09-08 22:57:03
ke hadapan
1413 orang telah melayarinya

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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;
}
Salin selepas log masuk

Output

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4
Salin selepas log masuk

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.
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 ;
};
Salin selepas log masuk

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;
Salin selepas log masuk

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;
}
Salin selepas log masuk

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

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan