位段
Updated:
位段
今天做PCM编码译码的C语言实现,需要对位进行操作,在同学的提示下接触到了C语言
的位段,不禁感叹,C语言真是很强大。
位段简介
位段是一种特殊的结构体类型,其每个成员是以位为单位来定义长度的,而不再是各种类型的变量。
|
|
位段有一些需要注意的地方。
- 一个位段必须说明int, unsigned, signed中的一种。长度为1的字段被认为是unsigned类型,因为单个的位段没有符号。
- 位段中成员的引用与结构体中成员的引用是一致的,用“.”运算符。例如:bits.x代表位段bits中得第一位,为0或者1。
- 可以定义无名字段。
- 一个位段必须在一个存储单元中,所以位段总长不能超过整型长度的边界。
- 位段可以在表达式中被引用(按整型数),也可以按照整型格式符输出。
- 位段不能定义数组。
- 不同的机器内部,位段是从左向右分布还是从右向左分布式不一定的。
利用共用体可以实现位段的赋值,这一点可以简化PCM译码。
|
|
程序运行的情况为:
i = 7, bits = 1 1 1
当将bits的a,b,c分别赋值为1时,也可以自动填充i的指,笔者已经测试过。