位结构体+大小端模式
来源:互联网 发布:淘宝服务行业 编辑:程序博客网 时间:2024/05/19 02:23
位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便
位结构定义的一般形式为:
struct 位结构名{
数据类型 [变量名]: 整型常数;
数据类型 [变量名]: 整型常数;
}位结构变量;
数据类型必须是整型(int char short)
例如:定义一个位结构
struct test{
char a: 8;
char b: 4;
char c: 3;
char d: 1;
}ch;
printf("%d\n",sizeof(struct test));
a:占用低字节的0~7共8位
b:占用高字节的0~3位
c:占用高字节的4~6位
d:占用高字节的第7位
输出多少?
(8+4+3+1)/8=2
struct info{
char name[8];
int age;
float pay;
unsigned char state: 1;
unsigned char pay: 1;
}workers;
sizeof(workers)=20
8+4+4+4(位结构体的大小应为最大成员<int>的整数倍)
位结构体成员叫位域,注意事项:
1. 一个位域必须存储在同一个字节中,不能跨两个字节
struct bs
{
unsigned a:4
unsigned :0 /*空域*/
unsigned b:4 /*从下一单元开始存放*/
unsigned c:4
}
在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。
2.位域不允许越过定义它的数据类型
3.位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的
struct k
{
int a:1
int :2 /*该2位不能使用*/
int b:3
int c:2
};
#include<stdio.h>
void main()
{
union
{
struct student
{
unsigned char s1:1;
unsigned char s2:3;
}x;
unsigned char c;
}v;
v.c=0;
v.x.s1=0;
v.x.s2=4;
printf("%d\n",v.c);
printf("%d\n",sizeof(struct student));
}
8(小端模式)
1
64(大端模式)
1
本题小结:
像intel的CPU是小端模式:
若左边是低位,右边是高位(不定),
如上面的例子中s1(0)比s2(100)先执行,先执行的一定是放低位,但s2的要反过来写(即001),在内存中表现为0 001,因为电脑是以字节为单位的,字节占八位,即后面四位补零,得:0001 0000,再有,小端模式是从高位读到低位的,即从右往左读,结果就是8;
像摩托罗拉的CPU是大端模式:
若左边是低位,右边为高位(自定),
如上面的例子中s1(0)比s2(100)先执行,先执行的一定是放低位,s2的不要反过来写(即100),在内存中表现为0 100,因为电脑是以字节为单位的,字节占八位,即后面四位补零,得:0100 0000,再有,大端模式是从低位读到高位的,即从左往右读,结果就是64;
#include<stdio.h>
void main()
{
union
{
struct student
{
unsigned char s1:1;
unsigned char s2:2;
unsigned char s3:2;
}x;
unsigned char c;
}v;
v.c=0;
v.x.s1=0;
v.x.s3=2;
printf("%d\n",v.c);
printf("%d\n",sizeof(struct student));
}
16(大小端都是)
1
- 位结构体+大小端模式
- 位结构体+大小端模式
- 位结构体+大小端模式
- 结构体中的位域不受大小端的影响?
- C结构体之位域(位段)结构体大小
- 结构体大小及其位域问题(from:byr)
- 结构体大小计算之位域字段
- 结构体大小计算之位域字段
- 结构体大小计算之位域字段
- 结构体和位段的大小计算
- 结构体大小的计算、联合、位段
- 32位系统环境下结构体大小
- 关于结构体,联合体,位字段的大小的
- 位域应用——大小端模式对union体的影响的反思。
- 结构体的大小与基本类型的大小(32位)
- 大小端模式与位字段小总结
- 结构体,联合的位域定义方法,以及结构体大小的计算
- 小议大小端模式对C语言的共用体结构的影响
- 谷歌再购IBM 217项专利,或用于甲骨文诉讼
- 无网线连接的XP与Linux文件共享
- ffmpeg与TS
- 安装VMware导致VS2005打不开的解决办法
- 记录,待总结
- 位结构体+大小端模式
- NYOJ--63题小猴子的下落
- 51汇编练手
- 类的声明、定义与初始化
- PHP框架中集成Smarty3模板引擎(二) ------ CakePHP 2.0
- c语言实现面向对象
- android传感器
- 国外程序员和国内程序员的不同分类
- C++著名程序库的比较和学习经验