世界最逆天写法诞生了
查看原帖
世界最逆天写法诞生了
1278314
zhang_sans楼主2025/8/4 14:59

有一种东西,叫union

看起来这玩意平平无奇,但它有一个特性:在这里面定义的任何变量都会在同一个指针上。

内存计算规则:使用最大内存的变量及以上的使用单个内存最大的变量的倍数。

如:

union U{
    int n;  //4 bytes
    char x[11];  //11 bytes
    double d;  //8 bytes
};
...
U u;
cout<<sizeof(u);

输出则为11及以上的8的倍数:16。

而同一个指针对应的数值也是一样的。

所以如果将一个整型和一个长度为2的短整型数组放在同一个union中,我们就可以通过short数组来访问int的前16位和后16位。

代码如下:

#include<iostream>
using namespace std;
union node{
    unsigned int num;
    unsigned short tmp[2];
};
int main()
{
    node u;
	cin>>u.num;
    swap(u.tmp[0],u.tmp[1]);
    cout<<u.num;
	return 0;
}
2025/8/4 14:59
加载中...