还是在笔试时候接触的题目,弄明白这个问题还是花费了不少的时间的。
首先说的是位域的基本概念,发飞了这么多的时间,就是败在了这儿~
位域的使用是为了节省存储空间,用来声明使用特定数目的位。位域标识符后面冒号所跟的数字即为要使用的位数。而不是将整个存储单元按比例划分,一开始臆测为按比例划分了。
看一下题目
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;
}
经过内存拷贝函数后,aa的存储单元存储的是字符串"0123”,具体的信息为该字符串的ASCII码30 31 32 33,显然b1占用的是30的最低5位,b2占用的是接下来的2位。
30的存储二进制信息为0011 0000.
最低5位1 0000,扩展为32位int,并据补码求得原码即为-16
接下来2为01 ,扩展后可的其原码为1.
故最后输出的的
-16
1
分享到:
相关推荐
详细描述位域的使用方法. 所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来...
C语言中的位域的使用 资料引用:http://www.knowsky.com/393359.html
C语言 位域PPT课件.pptx
C语言 位域PPT学习教案.pptx
描述了在C语言中如何对数据的位进行操作,使用FPGA的嵌入式设计应用
文章主要对C语言结构体的位域知识进行详细介绍。
本文主要介绍C语言 位域的知识,这里整理了相关资料,并附示例代码及详解,有兴趣的小伙伴可以参考下
所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。...下面这篇文章就给大家介绍下关于C语言中位域的使用与注意事项。
以下是对C语言中的位域和位段进行了详细的分析介绍,需要的朋友可以过来参考下
Linux c位域操作完整版 经典版 Linux c位域操作完整版 经典版
linux c 位域操作 报文 位域操作 报文 位域操作 报文 简单位域操作 位域操作 报文 位域操作 报文 位域操作 报文
大小端: 对于像C++中的char这样的数据类型,它本身就是占用一个字节的大小,不会产生什么问题。但是当数制类型为int,在32bit的系统中...小端:(Little-Endian)就是把数字的高位字节放在高位的地址上,低位字节放在
结构体位域说明 结构体位域说明 结构体位域说明
本文详细介绍了c/c++中的位域(bitfield)
c c++位域研究总结!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C# 位域方面的解释 C# 位域方面的解释
很详细的关于DSP寄存器位域的定义,非常有参考价值
进行一个字节8bit为的反转,根据C语言位域知识,进行10次赋值可任意调整转换值