原文:https://blog.hwg1998.com/blog/95

C++中有一个很神奇的类型——union共同体、或者说联合体。它提供了一个很便捷的功能,方便我们能对一块内存上的数据安装不同的格式去使用。

  1. 定义
union one4all
{char c[4];unsigned short s[2];unsigned int in;
};

安装这种定义方式,这个联合体在内存中占据4个byte,32bit

  1. 安照不同的方式去读取
one4all te;
te.in = 0x12345678;
cout << te.s[0]<<" "<< te.s[1]<<endl;

输出结果如下:
22136 4660

这是在小端机器上的运行结果,如果是在大端机器上,那么具体的结果我还没有测试过。哈哈哈

  1. 应用
    利用union这个特性,我们可以很方便的测试我们的机器是大端还是小端,具体的大端小端的理解,去这里看一下就明白了
    上代码,如果是小端机器,上文定义的te在内存中的存储应该是像下面这样,如果把这个联合体看作一个short数组的话,对应关系如下:
    0x78 0x56 0x34 0x12
    short[0] short[1]
    低 —> 高 //内存地址
    那么short[0]对应的数值就是0x5678

    如果是大端模式

     0x12 0x34    0x56    0x78short[0]        short[1]低       -->          高   //内存地址
    

此时short[0]对应的值就应该是0x1234啦 , 如果short数组的下标是随着内存地址的递增而递增的话。

验证代码```cpp
#include <iostream>
#include <bitset>
using namespace std;union one4all
{char c[4];unsigned short s[2];unsigned int in;
};int main(){one4all te;te.in = 0x12345678;bitset<32> bitsetv((te.in));cout << bitsetv <<endl;for(int i=0;i<4;i++)cout << bitset<8>(te.c[i]) << " ";cout <<endl;cout << te.s[0]<<" "<< te.s[1]<<endl;cout << "int:"<<te.in<<endl;cout << sizeof(bool) << " " <<sizeof(char) << " "<<sizeof(short) << " "<< sizeof(int) << " " << sizeof(te)<<endl;if(te.s[0] == 0x5678)cout << endl << "this machine is little-endian"<< endl;else if(te.s[1] == 0x5678)cout << endl << "this machine is big-endian"<< endl;elsecout << "can not judge"<< endl;return 0;
}
```输出结果```cpp
00010010001101000101011001111000
01111000 01010110 00110100 00010010
22136 4660
int:305419896
1 1 2 4 4this machine is little-endian
```

C++学习笔记——共同体相关推荐

  1. 【TCP/IP学习笔记1】 C语言讲解

    TCP/IP学习笔记(一) 一. TCP/IP结构:      TCP/IP是一个四层协议,结构如下:      1.应用层:各种应用程序和协议,如Http.FTP等.      2.传输层:TCP和 ...

  2. 英语学习笔记(经典100句)

    [写在前面] 参考链接: 7000雅思词汇用100个句子记完!就是这么神奇! - 知乎 (zhihu.com) 本文所有的例句,来自上述链接,可直接看原文. 我这里只是学习笔记,供个人使用.如侵,请告 ...

  3. TCP/IP学习笔记(一)(转载)

    一.TCP/IP结构:      TCP/IP是一个四层协议,结构如下:      1.应用层:各种应用程序和协议,如Http.FTP等.      2.传输层:TCP和UDP      TCP提供一 ...

  4. Kubernetes学习笔记-未整理

    Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...

  5. 历史经验之SNMP学习笔记

    整理日期:2011年9月8日 历史经验之SNMP学习笔记 export MIBDIRS=/share/snmp/mibs/ export MIBS=+LOOGSON-MIB :NET-SNMP-TUT ...

  6. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  7. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  9. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

最新文章

  1. Objective-C 什么是类
  2. Java 多线程模拟卖票
  3. Cuckoo WIndows 安装
  4. Linux配置ssh无密码验证,rsync
  5. 关于python的单线程和多线程
  6. 每天一个Linux命令-ls
  7. 花生壳For Linux安装步骤
  8. Java switch-case语句用法
  9. 记一次服务器被攻击事件
  10. 《剑指offer》面试题23——从上往下打印二叉树
  11. 六、CSS3的美化字体与段落
  12. 揭秘北京奥运会上的中国保镖[转贴]
  13. HDU 5855-最大权闭合图(-最小割应用)
  14. GPS基带P码处理总结——FPGA实现的关键点
  15. [BZOJ4372][烁烁的游戏][动态树分治+线段树+LCA]
  16. 成功在于实践作文_成功源于行动作文800字
  17. 每日新闻 | Google AI 负责人Jeff Dean:机器学习让计算机更智能
  18. Python 之并发编程之manager与进程池pool
  19. 生命周期onLoad和onShow的区别
  20. 第四代计算机相关资料,当前的计算机一般被认为是第四代计算机,它所采用的逻辑元件是...

热门文章

  1. ntp授时服务器(NTP网络时间服务器)应用公交数据网络
  2. NS版暗黑破坏神3金手指开发教程(17)
  3. 《嫁个100分男人》观后感
  4. 【XRT Vitis-Tutorials】图像并行计算
  5. 2018年UI设计师的工资待遇怎么样?高实在是高啊
  6. 百分百全开源的ERP项目,太赞了
  7. vs( Visual Studio)下载及安装2022
  8. 水果七种吃法最伤健康
  9. 全国数学竞赛D题思路分享
  10. mysql的安装--visual studio C++ Redistritable Packag