C中的位字段

假设您的C程序包括许多在一个名为页面的结构中分组的真实 /错误变量,以检查制成品是否允许足够的宽度和高度,如下:

 struct { unsigned int chieurong ; unsigned int chieucao ; } trangthai ; 

该结构需要8个字节的内存,但实际上它保留每个变量的0或1个字节。在这种情况下,C编程语言具有优化内存的方法。您正在使用结构内的变量,然后可以定义变量的大小,它将通知C编译器,仅使用字节数。例如,上述结构可以如下重写:

 struct { unsigned int chieurong : 1 ; unsigned int chieucao : 1 ; } trangthai ; 

现在,上述结构将需要4个字节的页面变量,但仅使用2个位来存储该值。您必须使用该长度为1位的最多32个变量,因此该结构将使用4个字节,并且当您具有33个变量时,它将在内存中分配下一个值并开始使用8个字节。现在,让我们检查下面的示例以了解此定义。

 #include #include /* dinh nghia mot cau truc don gian */ struct { unsigned int chieurong ; unsigned int chieucao ; } trangthai1 ; /* dinh nghia mot cau truc voi cac truong bit */ struct { unsigned int chieurong : 1 ; unsigned int chieucao : 1 ; } trangthai2 ; int main ( ) { printf ( "Bo nho bi chiem giu boi trangthai1 la: %dn" , sizeof ( trangthai1 )); printf ( "Bo nho bi chiem giu boi trangthai2 la: %dn" , sizeof ( trangthai2 )); printf ( "n===========================n" ); printf ( "QTM chuc cac ban hoc tot! n" ); return 0 ; } 

编译和运行上述C程序将导致:

在C中声明位字段

声明具有以下模式的结构内部的一些字段:

 struct { kieu_du_lieu [ ten_thanh_vien ] : do_rong ; }; 

以下是一个位字段中变量元素的描述:

elementDescriptionKieu_du_lieu一个整数类型可以确定位点的解释。此类型可以是int,签名的int,unsigned int ten_thanh_vien bit字段的名称。 do_rong(是宽度)字段中包含的位数。长度必须小于或等于特定对象的位字段长度。

用给定幅度值定义的变量称为位字段。一个位字段可以存储多个单位,例如您需要一个变量来存储从0到7的值,然后您可以定义最大长度3位的位字段,如下所示:

 struct { unsigned int tuoi : 3 ; } Tuoi ; 

上面的定义将指示C编译器,该变量将使用3位存储值,如果您使用3位以上,则不允许您这样做。现在尝试以下示例:

 #include #include struct { unsigned int tuoi : 3 ; } Tuoi ; int main ( ) { Tuoi . tuoi = 3 ; printf ( "Bo nho bi chiem giu boi Tuoi la Sizeof( Tuoi ) = %dn" , sizeof ( Tuoi ) ); printf ( "Tuoi.tuoi : %dn" , Tuoi . tuoi ); Tuoi . tuoi = 6 ; printf ( "Tuoi.tuoi : %dn" , Tuoi . tuoi ); Tuoi . tuoi = 7 ; printf ( "Tuoi.tuoi : %dn" , Tuoi . tuoi ); /* Bay gio chung ta thu in nhieu hon 3 bit */ printf ( "n-----------------------n" ); Tuoi . tuoi = 8 ; printf ( "Tuoi.tuoi : %dn" , Tuoi . tuoi ); Tuoi . tuoi = 9 ; printf ( "Tuoi.tuoi : %dn" , Tuoi . tuoi ); printf ( "n===========================n" ); printf ( "QTM chuc cac ban hoc tot! n" ); return 0 ; } 

编译和运行上述C程序将导致:

根据TutorialSpoint

上一篇文章:c的工会

下一课:C中的关键字Typedef

可能有兴趣

  • C中的关键字Typedef

    C程序语言提供了一个Typedef关键字,您可以使用它为新名称提供类型。这是一个为1字节号定义字节条目(如无符号字符)的示例。

  • C中的输入和输出

    当我们谈论输入时,我们正在谈论该程序的输入数据。可以从命令行或某个文件提供。程序C语言提供了一组可用的功能来读取输入的数据并为所需程序提供。

  • 读取 - 在C中写文件

    上一章解释了由C语言处理的标准输入和输出设备。在本章中,我们将看到程序员如何使用数据创建,打开和关闭文本文件或二进制文件。贮存。

  • c

    C中的预处理程序不是编译器的一部分,但是编译过程中有单独的步骤。以最基本的方式,C语言中的预处理程序是文本替换工具,编译器指令不需要在编译之前进行预处理。

  • C中的标题文件

    文件标头是具有.h格式的文件,其中包含函数声明和宏定义,可以在多个源文件上共享。文件标头有两种类型:程序员写的文件以及编译器随附的文件。

  • 按C中的类型

    类型是将变量从一种数据类型转换为另一种数据类型的一种方法。