[整理]C结构实现位段(bit field)

#include <stdio.h>
#include <string.h>

typedef struct A{
	int a:5;
	int b:3;
	unsigned c:8;
	unsigned d:8;
} Type_A;

/* VS2010, Windows XP, Debug模式下运行 */
int main(void)
{
	struct A a;
	char s[]="12345678";

	printf( "%d\n",sizeof(Type_A) );//4
	printf("%d\n",sizeof(a));//4

	memcpy(&a,s,3);
	printf("%d\n",a.a);//‘1‘的低位 -15
	printf("%d\n",a.b);//‘1‘的高位 1
	printf("%d\n",a.c-‘0‘);//‘3‘ 51
	printf("%d\n",a.d-‘0‘);//‘4‘ 52

	return 0;
}

‘1‘(49)的二进制 00110001,
a.a=10001 (-15)
a.b=001     (1)

由A的定义已知a.a(10001)是代表一个有符号的int型,

先执行符号位扩展得到11110001,

再减一得到11110000,

再取反得到10001111,就是-15的源码了.
所以a.a的值为-15, 同理,a.b为1。

参考:

http://www.cnblogs.com/bigrabbit/archive/2012/09/20/2695543.html

[整理]C结构实现位段(bit field),布布扣,bubuko.com

时间: 2024-08-06 11:56:44

[整理]C结构实现位段(bit field)的相关文章

12、C#基础整理(结构体)

结构体 1.概念: 结构体是写在main函数外的数据结构,由不同类型的数据组合成一个整体,这些组合在一个整体中的数据是互相联系的 2.声明方式: struct 结构体名 { 成员变量(由类型名+成员名组成) } 例: public struct student//public是修饰符,可以不加,作用范围为整个命名空间 { public int Code;//定义变量,每一个变量叫做结构体的属性 public string Name; public string Sex; public int A

C#整理8——结构体

结构体:相当于是我们自己定义的一种复杂的类型.int... double float bool char string DateTime 数组类型生活中大部份的对象都是复合型的对象. 如何定义结构体类型?一般来说结构体的定义要放在class的外面或class的里面,尽量不放在Main的里面.struct 自定义类型名{public 变量类型 变量名;......;......;......; }例如:struct YuanGong //自定义的数据类型.用来描述员工的信息.{public str

golang 碎片整理之 结构体

什么是结构体? 结构体(struct)是用户自定义的类型,它代表若干字段的集合,可以用于描述一个实体对象,类似Java中的class,是golang面向对象编程的基础.结构体的概念在软件工程上的旧术语是ADT(抽象数据类型: Abstract Date type).在c++它也是存在,并且名字也是struct,在面向对象的编程语言中,跟一个无方法的轻量级类一样.因为在Go语言中没有类的概念,所以在go中结构体有着很重要的地位. 如何定义一个结构体 type Coordinate struct {

ZZZ_整理的结构

A.头尾 添加/移除 B.随机存取 B.1.[?] ==> 越界时,程序 崩溃 B.2.at(?) ==> 越界时,抛异常 out_of_range C.数据存取 1.构造函数 2.赋值 3.迭代器操作 4.插入 5.删除 6.交换 7.大小 8.查找

C语言位段的应用:统计二进制的位数

位段是C语言中使用较少的一种特殊的结构体,C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为"位段"或称"位域"( bit field) .利用位段能够用较少的位数存储数据. 信息的存取一般以字节为单位.实际上,有时存储一个信息不必用一个或多个字节,例如,"真"或"假"用0或1表示,只需1位即可.在计算机用于过程控制.参数检测或数据通信领域时,控制信息往往只占一个字节中的一个或几个二进制位,常

005-循环结构(上)-C语言笔记

学习目标 1.[掌握]switch-case结构 2.[理解]case语句穿透 3.[理解]Xcode断点调试 4.[理解]while循环结构初体验 5.[掌握]while循环结构的应用 6.[理解]break和continue 一.switch-case结构 switch(表达式){ case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; ... break; case 常量表达式n: 语句n; break; default: 语句n+1; break; } 1

css命名规范&mdash;CSS样式命名整理

CSS样式命名整理 页面结构 容器: container/wrap整体宽度:wrapper页头:header内容:content页面主体:main页尾:footer导航:nav侧栏:sidebar栏目:column中间内容:center 导航 导航:nav导航:mainbav/globalnav子导航:subnav顶导航:topnav边导航:sidebar左导航:leftsidebar右导航:rightsidebar边导航图标:sidebarIcon菜单:menu子菜单:submenu标题: t

程序媛计划——mysql修改表结构

#查看表的结构 mysql> desc score; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(4) | NO | PRI | NULL | a

CSS样式命名整理(非原创)

非原创,具体出自哪里忘了,如果侵害您的利益,请联系我. CSS样式命名整理 页面结构 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体:main 页尾:footer 导航:nav 侧栏:sidebar 栏目:column 中间内容:center 导航 导航:nav 导航:mainbav/globalnav 子导航:subnav 顶导航:topnav 边导航:sidebar 左导航:leftsidebar 右导航:rightside