C++学习笔记——共同体
原文:https://blog.hwg1998.com/blog/95
C++中有一个很神奇的类型——union共同体、或者说联合体。它提供了一个很便捷的功能,方便我们能对一块内存上的数据安装不同的格式去使用。
- 定义
union one4all
{char c[4];unsigned short s[2];unsigned int in;
};
安装这种定义方式,这个联合体在内存中占据4个byte,32bit
- 安照不同的方式去读取
one4all te;
te.in = 0x12345678;
cout << te.s[0]<<" "<< te.s[1]<<endl;
输出结果如下:
22136 4660
这是在小端机器上的运行结果,如果是在大端机器上,那么具体的结果我还没有测试过。哈哈哈
应用
利用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++学习笔记——共同体相关推荐
- 【TCP/IP学习笔记1】 C语言讲解
TCP/IP学习笔记(一) 一. TCP/IP结构: TCP/IP是一个四层协议,结构如下: 1.应用层:各种应用程序和协议,如Http.FTP等. 2.传输层:TCP和 ...
- 英语学习笔记(经典100句)
[写在前面] 参考链接: 7000雅思词汇用100个句子记完!就是这么神奇! - 知乎 (zhihu.com) 本文所有的例句,来自上述链接,可直接看原文. 我这里只是学习笔记,供个人使用.如侵,请告 ...
- TCP/IP学习笔记(一)(转载)
一.TCP/IP结构: TCP/IP是一个四层协议,结构如下: 1.应用层:各种应用程序和协议,如Http.FTP等. 2.传输层:TCP和UDP TCP提供一 ...
- Kubernetes学习笔记-未整理
Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...
- 历史经验之SNMP学习笔记
整理日期:2011年9月8日 历史经验之SNMP学习笔记 export MIBDIRS=/share/snmp/mibs/ export MIBS=+LOOGSON-MIB :NET-SNMP-TUT ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
最新文章
- Objective-C 什么是类
- Java 多线程模拟卖票
- Cuckoo WIndows 安装
- Linux配置ssh无密码验证,rsync
- 关于python的单线程和多线程
- 每天一个Linux命令-ls
- 花生壳For Linux安装步骤
- Java switch-case语句用法
- 记一次服务器被攻击事件
- 《剑指offer》面试题23——从上往下打印二叉树
- 六、CSS3的美化字体与段落
- 揭秘北京奥运会上的中国保镖[转贴]
- HDU 5855-最大权闭合图(-最小割应用)
- GPS基带P码处理总结——FPGA实现的关键点
- [BZOJ4372][烁烁的游戏][动态树分治+线段树+LCA]
- 成功在于实践作文_成功源于行动作文800字
- 每日新闻 | Google AI 负责人Jeff Dean:机器学习让计算机更智能
- Python 之并发编程之manager与进程池pool
- 生命周期onLoad和onShow的区别
- 第四代计算机相关资料,当前的计算机一般被认为是第四代计算机,它所采用的逻辑元件是...