结构体中特殊定义int a:5
来源:互联网 发布:汉语言文学专业 知乎 编辑:程序博客网 时间:2024/06/14 12:51
面试题
typedef struct AA{ int b1:5; int b2:2;}AA;void main(){ AA aa; char cc[100]; strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz"); memcpy(&aa,cc,sizeof(AA)); cout << aa.b1 <<endl; cout << aa.b2 <<endl;}
运行结果是-16,1
看到这个面试题,很晕,没见到过这种情况。
那么这个intb1:5,intb2:2;是什么意思?
表示b1占用5个二进制位,数据范围就是00000-11111,当然也分有无符号位了。Int b2:2;就是占接着的两个二进制位。
怎么占的呢?
sizeof(AA)又是多少呢?int型占4个字节,所以以4个字节为默认对齐字节,只能为4的倍数,所以为4.
取‘0123‘’’存在AA中,从4个字符的低5位给B1,接着的两位是b2.
#include<iostream>#include <string.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>#include <memory.h>using namespace std;typedef struct AB{ int b1:5; int b2:3; int b3:3; int b4:5; int b5:4; int b6:5; int b7:4;}AA;int main(){ AA aa; char cc[100]; strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz"); memcpy(&aa,cc,sizeof(AA)); cout << aa.b1 <<endl; cout << aa.b2 <<endl; cout << aa.b3 <<endl; cout << aa.b4 <<endl; cout << aa.b5 <<endl; cout << aa.b6 <<endl; cout << aa.b7 <<endl;}//00110000,00110001,00110010,00110011//b1,10000//b2,001//b3,001//b4,00110//b5,0010//b6,10011//b7,1001结果是
-16, 1,1,6,2,-13,-7我这里做了修改且把各种情况都描写了。
阅读全文
0 0
- 结构体中特殊定义int a:5
- ns2中结构体定义
- 结构体中定义指针
- c++中int a, int *a=new int和 int *a=new int()
- 结构体中定义函数指针
- JNI 中 JNIEnv 结构体的定义
- 结构体中定义函数指针
- 结构体中定义string变量
- 结构体中定义函数指针
- 结构体中定义函数指针
- 结构体中定义函数指针
- 结构体中定义函数指针
- c c++中结构体定义
- darwin之结构体中定义宏
- 在结构体中定义宏定义意义
- int *ptrl=(int*)(&a+1); int *ptr=(int*)((int)a+1) 这两个定义有什么区别
- Linux内核中结构体的特殊初始化方法
- PLSQL中一些特殊类型定义方法
- Android 获取当前网速
- 编写可维护的javascript(六):避免使用全局变量
- matlab中的正则表达式
- hadoop集群搭建
- 关于移动端rem适配问题
- 结构体中特殊定义int a:5
- CVPR 2017最佳论文解读:密集连接卷积网络DenseNet
- HDU
- hibernate动态表名
- nio简单demo,帮助理解io与nio区别
- Linux环境下通过pdb调试Python程序
- 自己封装一个插件化框架
- OSI模型与TCP/IP参考模型
- NYOJ-括号匹配(二)