C++结构体中的位域

       结构体的存储方式存在内存对齐问题,在本文中不展开讨论,本文主要想说明两个问题,第一个是位域的赋值问题;还有一个就是数据的表达形式。

好了,现在我们先讨论一下位域的赋值问题;现假设有如下结构体

struct byte
{
       int one:2;
       int two:1;
};

首先我们知道,one和two存储在同一个字节中,所以我们本能的以为语句

struct byte we={7};

会将one的两bit置为11,而把two的一位置为1;但是在实际的结果如下:

由此可知,这样做并没有将two赋值成功;下面这句能够成功赋值

struct byte we={3,1};

结果如下:

至此,对于结构体位域赋值问题讨论到这里,从上面程序的结果其实很多人都会发现为何最终结果是-1;那下面来看看下面的赋值语句会造成什么结果

struct byte we={1,1};



现在让我们把目光聚集到we.one上面,第一次它的值为11(3)显示为-1;第二次他的值为01(1)显示为1;

对此我想很多人已经看明白了。其实就是按照高位把剩余的高位补齐,然后按照int的方式显示导致的,比如11会被补为11111111,而01补为00000001,这样我们看到的结果就不再奇怪了!


猜你喜欢

转载自blog.csdn.net/C_Dreams/article/details/78214683
今日推荐