บทช่วยสอน สาขาซีบิต ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ ประกาศฟิลด์บิต,
หากโครงสร้างของโปรแกรมที่มีมากกว่าเพียงคนเดียวจริง / เท็จตัวแปรดิจิตอลดังนี้
struct { unsigned int widthValidated; unsigned int heightValidated; } status;
การกำหนดค่านี้ต้อง 8 ไบต์ของพื้นที่หน่วยความจำ แต่ในความเป็นจริงในแต่ละตัวแปรเราเก็บ 0 หรือ 1 ในกรณีนี้ภาษา C มีการใช้งานที่ดีขึ้นของพื้นที่หน่วยความจำในทาง หากคุณใช้ตัวแปรดังกล่าวภายในโครงสร้างที่คุณสามารถกำหนดความกว้างของตัวแปรที่จะบอกคอมไพเลอร์ที่คุณจะใช้เพียงไบต์เหล่านั้น ยกตัวอย่างเช่นโครงสร้างดังกล่าวข้างต้นสามารถเขียนเป็น:
struct { unsigned int widthValidated : 1; unsigned int heightValidated : 1; } status;
ตอนนี้โครงสร้างข้างต้นตัวแปรสถานะตรงบริเวณสี่ไบต์หน่วยความจำ แต่มีเพียงสองจะใช้ในการจัดเก็บค่า ถ้าคุณใช้ 32 ตัวแปรแต่ละกว้างตัวแปรหนึ่งแล้วโครงสร้างสถานะจะใช้ 4 ไบต์ แต่ตราบใดที่คุณใช้ตัวแปรถ้าคุณใช้ 33 ตัวแปรก็จะอยู่ภายใต้ส่วนของหน่วยความจำที่จัดสรร ตัวแปรที่ 33 ครั้งแรกจะถูกเก็บไว้ในครั้งนี้จะเริ่มใช้ 8 ไบต์ ลองดูที่ตัวอย่างต่อไปนี้เพื่อให้เข้าใจแนวคิดนี้:
#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; }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
Memory size occupied by status1 : 8 Memory size occupied by status2 : 4
ในเขตบิตการประกาศโครงสร้างจะเป็นดังนี้:
struct { type [member_name] : width ; };
ต่อไปนี้เป็นคำอธิบายของสนามบิตองค์ประกอบตัวแปร:
元素 | 描述 |
---|---|
type | 整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。 |
member_name | 位域的名称。 |
width | 位域中位的数量。宽度必须小于或等于指定类型的位宽度。 |
ตัวแปรที่มีความกว้างที่กำหนดไว้ล่วงหน้าที่เรียกว่าเขตบิตเขตบิตสามารถจัดเก็บจำนวนมากกว่าหนึ่งตัวอย่างเช่นต้องตัวแปรเพื่อเก็บค่าตั้งแต่ 0 ถึง 7 คุณสามารถกำหนดความกว้างของทุ่งสามบิตดังนี้
struct { unsigned int age : 3; } Age;
ความหมายของโครงสร้างดังกล่าวข้างต้นคอมไพเลอร์ C ทิศทางอายุจะใช้สามตัวแปรเพื่อเก็บค่านี้ถ้าคุณพยายามที่จะใช้มากกว่าสามคุณไม่สามารถดำเนินการ ลองดูตัวอย่างต่อไปนี้:
#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; }
เมื่อโค้ดข้างต้นจะรวบรวมก็จะดำเนินการแจ้งเตือนเมื่อโค้ดข้างต้นจะถูกดำเนินการก็จะให้ผลลัพธ์ที่ต่อไปนี้:
Sizeof( Age ) : 4 Age.age : 4 Age.age : 7 Age.age : 0