位结构体+大小端模式

位结构体+大小端模式

位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便
 
位结构定义的一般形式为: 
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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值