当前位置: 首页 > news >正文

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

#include <stdio.h>
#pragma pack(1)
struct stu{char a:4; // a占用char的低4位  char b:4; // b占用char的高4位(注意,这里实际上是与a共享同一个char的空间)  
};
#pragma pack(4)
int main()
{struct  stu s={.a=2,   //a:0010.b=3,   //b:0011};struct  stu s1={.a=2,   //a:0010.b=8,   //b:1000};printf("%d\n",*(char *)&s);//s打印出50: 0000 0000 0000 0000 0000 0000 0011 0010(输出时符号位扩展)printf("%d\n",*(char *)&s1);//打印出-126(0000 0000 0000 0000 0000 0000 0111 1110)printf("sizeof %ld\n",sizeof s);return 0;
}
#include <stdio.h>  struct mybitfields  
{  unsigned short a : 4;  unsigned short b : 5;  unsigned short c : 7;  
}test;  int main()   
{  int i;  test.a=2;  test.b=3;  test.c=0;  i=*((short *)&test);  printf("%d ",i);  return 0;  
}  

在定义结构体的时候,分配的成员a 4位的空间, b 5位,c7位,一共是16位,正好
两个字节。下面画一个简单的示意:
变量名  位数

  

两个字节为 0000 0000 0011 0010 

在执行i=*((short *)&test);时,取从地址&test开始两个字节(short占两个字节)的内容转化为short型数据,即为0x0032,
再转为int型为0x00000032,即50。输出的结果就是50。当然,这里还涉及到字节及位的存储顺序问题。


http://www.mrgr.cn/news/19101.html

相关文章:

  • 用ChatGPT三分钟写一个完美的PPT,彻底告别繁琐的制作过程
  • Datawhale X 李宏毅苹果书AI夏令营 学习笔记
  • vector底层原理(二)
  • YOLOv5 结合切片辅助超推理算法 | 这才叫让小目标无处遁形!
  • TCP 拥塞控制
  • Android之Handler的post方法和sendMessage的区别
  • 【Linux操作系统】:Linux生产者消费者模型
  • 大二暑假去龙旗科技(上海)做了两个月软件测试实习生,讲讲我的经历和感受
  • 【2024】Datawhale X 李宏毅苹果书 AI夏令营 Task3
  • ssh安装
  • 华为OD机试 - 最长方连续方波信号(Java 2024 E卷 100分)
  • [SDK]-按钮静态文本与编辑框控件
  • C#中的Array.Sort()和Reverse()
  • 批量修改海量cad文件名——vba实现
  • 宝藏!《联盟现代控制特训班题库》(麒麟篇) 习题部分:甄选内容
  • 将泛型和函数式编程结合,竟然会让代码这么优雅!
  • 数据访问:JPA关联MyBatis
  • 【MySQL00】【 杂七杂八】
  • 【C++11(一)之入门基础)】
  • 使用UniApp实现自定义音乐播放器组件封装(简单轻量级,完美支持H5/小程序/Android)