[转载+探讨]union的用法

简介:

  笔者编码经验比较少,union只知概念,几乎没用过。昨日看到在UNP上一个示例程序如下

判断系统使用大端还是小端

  对un.s理解了半天,才明白它是以s的类型填充,又以c的类型访问。以前仅限于“需要存什么类型就存什么”的简单理解。而后看了一篇博文和某一回复,更是有所启发。地址:http://www.cnblogs.com/liuyazhou/archive/2010/03/30/1700823.html和3#的回复,下面把它转载过来了,留档备用。

 
很变态的一个union

朋友给我发的一个题,是关于union的。我知道union共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且只能储存其中一个成员变量的值。但这个程序的结果还是让我破感意外。现在也没有琢磨出为什么会是这样。

程序如下:

 

复制代码
#include <iostream>    
using namespace std;    
   
struct byte    
{    
     unsigned int a1:1;    
     int a2:1;    
     int a3:1;    
     int a4:1;    
     int a5:1;    
     int a6:1;    
     int a7:1;    
     int a8:1;    
};    
   
union b    
{    
    char c;    
    struct byte bit;    
}union_a;    
   
int main(int argc, char *argv[])    
{    
    union_a.c = 'A';   
    cout <<(union_a.bit.a7 + union_a.bit.a1) << endl;         
    return 0;    
}   
复制代码

 

运行结果为0.

感到不解,于是输出了a1-a8的所有值。其中a1=1,a7=-1,其他均为0.

 有高手可以分析一下这是怎么回事吗?

 
3#回复
2010-03-30 21:33 |  步碎酒散花醉       
@newhi
sizeof(byte)=4是因为你的struct中的数据类型的最大长度是4 就是int的长度 虽然总共申明的长度只有1byte但是仍然占4个byte空间 编译器使然 这块可以详细了解下 很玄妙...- -
A=65=0x41=(01000001)2
如此 a1=1 a7=1 其余全为0了
就是这个样子
a1是unsigned int 换成十进制就是1
a7是int 计算机按补码表示 换成十进制就是-1

可以在调试的时候进入内存看一下数据是什么样的
 




本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/articles/2445253.html,如需转载请自行联系原作者

目录
相关文章
|
5月前
Union和Union All到底有什么区别
Union和Union All到底有什么区别
130 1
|
7月前
|
关系型数据库 MySQL
MySQL union和union all的用法详解和区别
MySQL union和union all的用法详解和区别
462 0
|
SQL Oracle 关系型数据库
union 和 union all 的区别及使用说明
union 和 union all 的区别及使用说明
194 0
可以使用 UNION 或者 UNION ALL 来合并多个 SELECT 语句的结果
可以使用 UNION 或者 UNION ALL 来合并多个 SELECT 语句的结果
267 7
union和union all 的区别
union和union all 的区别
242 0
SQL语句中union all和union的区别以及用法
SQL语句中union all和union的区别以及用法
154 0
|
SQL
十二、UNION操作符
十二、UNION操作符
100 0
|
存储 SQL 移动开发
mysql之常用函数、聚合函数以及合并(union&union all)
1) UNION:将所有的查询结果合并到一起,然后去除掉相同的记录 2) UNION ALL:将所有的查询结果合并到一起,不会去除掉相同的记录 前提条件:结果集列数个数相同,列的类型还要相同或是兼容 使用场景:在项目统计报表模块,用来合并数据
十六、UNION 与 UNION ALL 的使用
十六、UNION 与 UNION ALL 的使用
212 0
十六、UNION 与 UNION ALL 的使用