C++ union以及大小端

union

一个特殊的类,联合体;

union {

    int a;

    char c;

    short s;

} un;

联合体内的各种数据共用一个内存,所以联合体所占内存就等于占用内存最大的成员的内存大小;

一个时刻只能给一个成员赋值,赋值后该内存的数据就被修改。

 

大小端

指内存中字节的储存方式:大端、小端;

比如要存储一个二进制数据00010010;

大端的存储方式就是将高序字节0001存储在高地址,低序字节0010存储在低地址;小端相反

使用union判断本机是大端还是小端存储方式

#include <iostream>
using namespace std;

int main() {
    union {
        int i;
        char c;
    } u;
    u.i = 1;
    if(u.c == 1)
        cout << "小端" << endl;
    else
        cout << "大端" << endl; 

原理很简单:联合体内的整型和字符数据存储位置一样,一旦你给整型赋值了,字符的数据值便是整型的第一段四分之一的低地址,如果是小端字节序,那么该低地址存储的就是“1”的低序字节,也就是“1”;反之就是大端;

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值