Latest web development tutorials
×

C หลักสูตร

C กวดวิชาภาษา C แนะนำโดยย่อ C การตั้งค่าสภาพแวดล้อม C โครงสร้างหลักสูตร C ไวยากรณ์พื้นฐาน C ชนิดข้อมูล C ตัวแปร C คงที่ C ประเภทการจัดเก็บ C ผู้ประกอบการ C ผู้พิพากษา C การไหลเวียน C ฟังก์ชัน C การกำหนดขอบเขตกฎระเบียบ C แถว C ชี้ C เชือก C โครงสร้าง C สหภาพ C ฟิลด์บิต C typedef C อินพุตและเอาต์พุต C การอ่านออกเขียนเอกสาร C preprocessor C ส่วนหัว C ปลดเปลื้อง C จัดการข้อผิดพลาด C recursion C พารามิเตอร์ตัวแปร C จัดการหน่วยความจำ C บรรทัดคำสั่ง C คลาสสิก 100 ราย

C ห้องสมุดมาตรฐาน

C ห้องสมุดมาตรฐาน - คู่มืออ้างอิง C ห้องสมุดมาตรฐาน - <assert.h> C ห้องสมุดมาตรฐาน - <ctype.h> C ห้องสมุดมาตรฐาน - <errno.h> C ห้องสมุดมาตรฐาน - <float.h> C ห้องสมุดมาตรฐาน - <limits.h> C ห้องสมุดมาตรฐาน - <locale.h> C ห้องสมุดมาตรฐาน - <math.h> C ห้องสมุดมาตรฐาน - <setjmp.h> C ห้องสมุดมาตรฐาน - <signal.h> C ห้องสมุดมาตรฐาน - <stdarg.h> C ห้องสมุดมาตรฐาน - <stddef.h> C ห้องสมุดมาตรฐาน - <stdio.h> C ห้องสมุดมาตรฐาน - <stdlib.h> C ห้องสมุดมาตรฐาน - <string.h> C ห้องสมุดมาตรฐาน - <time.h>

สาขาซีบิต

หากโครงสร้างของโปรแกรมที่มีมากกว่าเพียงคนเดียวจริง / เท็จตัวแปรดิจิตอลดังนี้

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