位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便

位结构定义的一般形式为:

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(位结构体的大小应为最大成员的整数倍)

位结构体成员叫位域,注意事项:

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

int b:3

int c:2

};

#include

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

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

linux结构体大小端,【转】位结构体+大小端模式相关推荐

  1. 一个微软面试题--关于位结构体

    含位域结构体的sizeof: 前面已经说过,位域成员不能单独被取sizeof值,我们这里要讨论的是含有位域的结构体的sizeof,只是考虑到其特殊性而将其专门列了出来. C99规定int.unsign ...

  2. 关于位结构体及位操作总结

    c语言中 关于位结构体 及 位操作总结: 位结构体 (参考网址) 位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一 ...

  3. 关于位结构体 及 位操作总结

    c语言中 关于位结构体 及 位操作总结: 位结构体 (参考网址) 位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一 ...

  4. 位结构体+大小端模式

    位结构体+大小端模式 位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便   位结构定义的一般形式为:  struct  位结构名{  数据类型 [变量名]: ...

  5. C语言学习笔记11-结构体(struct、结构作为函数参数、结构数组)、联合体/共用体typedef; union(大、小端序)

    C语言-结构类型 程序中的数据都需要有类型支撑,当数据很复杂时(不是简单的一个值,如时间信息:年月日时分秒6个数据需要作为一个整体),我们需要声明一个新的结构类型来描述这种复合的数据(可以包含很多不同 ...

  6. Linux下Socket编程中用send发送结构体

    转自:http://tech.ddvip.com/2008-10/122543769687623.html Linux网络通信 Linux下多客户端聊天软件 Linux程序设计 Linux socke ...

  7. Linux下DIR,dirent,stat等结构体详解(转)

    最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...

  8. Linux下DIR,dirent,stat等结构体详解

    最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...

  9. linux socket 结构定义 send,Linux下Socket编程中用send发送结构体

    Linux网络通信 Linux下多客户端聊天软件 最近在开发一个Linux下的聊天软件,好久没有做C语言的开发了,感觉到很多东西已经生疏了,这下又碰到用Socket传递结构体的问题,google了一下 ...

最新文章

  1. 计算机桌面文件夹删除如何找回,电脑删除文件如何恢复 误操作的一剂后悔药...
  2. 北京对无人车的热情,华尔街都感受到了
  3. php给留言分配id_如何使用php生成唯一ID的4种方法
  4. 【排序算法】— 手写堆排序
  5. 阿里云伯俊软件:强强联合,共建新生态
  6. 连载:阿里巴巴大数据实践—实时技术
  7. ionic overflow:auto失效
  8. 如何找出Fiori launchpad URL start_up请求发起的具体位置
  9. Bootstrap3 按钮状态提示
  10. python map什么意思_Python中map是什么意思
  11. Android_Bitmap_图片的二次采样并生成缩略图
  12. c# socket接收字符串_php 的 socket简单原理及实现
  13. Uabntu安装AWVS11以及破解
  14. java 解决世界最难数独
  15. 怎么查看linux系统硬盘,Linux系统下如何查看所有存储设备(磁盘分区)
  16. Lattice PCIe 学习 1
  17. mybatis foreach
  18. JAVA incept_java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
  19. 算法小解--剑指offer(一)
  20. git push问题:kex_exchange_identification: read: Connection reset by peer

热门文章

  1. 【Javascript】深入理解this作用域问题以及new/let/var/const对this作用域的影响
  2. 移动网页广告引入mraid.js使用指南
  3. Vue SSR(Vue2 + Koa2 + Webpack4)配置指南
  4. oracle 中查询当前用户可以看到的表名、表对应的所有字段
  5. jq根据文本显示内容设置样式
  6. 全排列递归实现(二)
  7. mips语言实现 f(n) = f(n-1) + 2*f(n-2) + 3*f(n-3)
  8. GridView 的EmptyDataText 及 EmptyDataTemplate
  9. python调试_Python 调试
  10. android l camera no panorama,Android Camera从App层到framework层到HAL层的初始化过程