位段的数据结构- 数据排列和打印
2016-08-18 18:25
204 查看
位段
位段定义,赋值,输出,占用的问题说明
遇到位段相关的问题,这里记录下来:
typedef struct A
{
int a:5;
int b:3;
}NEWSTRU;
int _tmain(int argc, _TCHAR* argv[])
{
char x[100] = "0123456789";
NEWSTRU te;
memcpy(&te, x, sizeof(NEWSTRU));
printf("value is A-HEX:%X, A-DEC:%d B-HEX:%X,B-DEC:%d te-(int) %X\n",te.a, te.a,te.b,te.b, *((int *)&te));
return 0;
}
打印结果如下:
value is A-HEX:FFFFFFF0, A-DEC:-16 B-HEX:1,B-DEC:1 te-(int) 33323130
最初对结果非常不解,下面是解释:\
1.在使用HEX输出时,如果最高位为1,则将被认成负值,剩余高位用1填充
此时,如果以%d输出的话,则取补码(取反+1)然后前面加个负号
如果以%X输出的话,则高位填充1,然后直接打印出来
举例:
以下struct A为例,
{
int a:5;
int b:3;
}
被拷贝值 0x30
则打印 a = -16或者 0xfffffff0
b = 1
另,位段只能以int, unsigned int, signed int 来定义,且定义的位段大小不可以超过sizeof(int)
连续几个位段变量,如果大小之和都在sizeof(int)内的话,将挤在一起
但是如果当下一个位段变量挤不下的话,将抛弃上面的空间,从新开始
举例:
这里 int为32位
struct A
{
int a:31;
int b:3;
}
则b将另起计算空间,而不使用a剩下的1bit
struct A
{
int a:4;
int b:4;
}
则ab将挤在一起,假设struct A = 0x000102CD
则a = 0x0D
b = 0x0C
位段定义,赋值,输出,占用的问题说明
遇到位段相关的问题,这里记录下来:
typedef struct A
{
int a:5;
int b:3;
}NEWSTRU;
int _tmain(int argc, _TCHAR* argv[])
{
char x[100] = "0123456789";
NEWSTRU te;
memcpy(&te, x, sizeof(NEWSTRU));
printf("value is A-HEX:%X, A-DEC:%d B-HEX:%X,B-DEC:%d te-(int) %X\n",te.a, te.a,te.b,te.b, *((int *)&te));
return 0;
}
打印结果如下:
value is A-HEX:FFFFFFF0, A-DEC:-16 B-HEX:1,B-DEC:1 te-(int) 33323130
最初对结果非常不解,下面是解释:\
1.在使用HEX输出时,如果最高位为1,则将被认成负值,剩余高位用1填充
此时,如果以%d输出的话,则取补码(取反+1)然后前面加个负号
如果以%X输出的话,则高位填充1,然后直接打印出来
举例:
以下struct A为例,
{
int a:5;
int b:3;
}
被拷贝值 0x30
则打印 a = -16或者 0xfffffff0
b = 1
另,位段只能以int, unsigned int, signed int 来定义,且定义的位段大小不可以超过sizeof(int)
连续几个位段变量,如果大小之和都在sizeof(int)内的话,将挤在一起
但是如果当下一个位段变量挤不下的话,将抛弃上面的空间,从新开始
举例:
这里 int为32位
struct A
{
int a:31;
int b:3;
}
则b将另起计算空间,而不使用a剩下的1bit
struct A
{
int a:4;
int b:4;
}
则ab将挤在一起,假设struct A = 0x000102CD
则a = 0x0D
b = 0x0C
相关文章推荐
- 数据结构之树状数组
- 图结构练习——BFSDFS——判断可达性
- 图结构练习——BFS——从起始点到目标点的最短步数
- 数据结构实验之图论八:欧拉回路
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构——18 二叉树(非递归)
- 线段树
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构——17 二叉树(递归)
- 数据结构——16 栈数组描述
- 二叉排序树
- 数据结构——15 栈链表描述
- 数据结构——14 循环队列
- 数据结构实验之二叉树一:树的同构
- 数据结构——13 队列链表描述
- 数据结构——12 删除两个双向链表中相同的节点
- SDUTACM 数据结构实验之查找七:线性之哈希表
- 数据结构——11 有序双向链表中插入节点
- 数据结构——10 双向链表插入和删除节点
- 数据结构——9 双向链表建立、输出和测长