鱼C论坛

 找回密码
 立即注册
查看: 2528|回复: 1

共用体

[复制链接]
发表于 2022-11-24 19:08:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
void partition(unsigned long int num)
{
        union a
        {
                unsigned int part[2];
                unsigned long int w;
        }n,*p;
        p=&n;
        n.w=num;
        printf("long int=%lx\n",num);
        printf("low-part num=%0x,high-part num=%0x\n",p->part[0],p->part[1]);
}
int main()
{
        unsigned long int x;
        x=0x23456789;
        partition(x);
        return 0;
}
这个代码能解释一下吗
QQ图片20221123192503.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-24 19:45:08 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-24 19:55 编辑

        这个教材太老,不适合今天,一个 int 占用 2 字节,那是 DOS 时代 16 位程序横行时的事情,如果在今天使用,必须改代码。
#include<stdio.h>

void partition(unsigned int num)
{
        union a
        {
                unsigned short part[2] ; // 共用体成员 part 是一个有 2 个 unsigned short 型元素的一维数组
                unsigned int w         ; // 共用体成员 w 是一个 unsigned int 型的变量
        } n , * p                      ; // 共用体的容量由体量最大的成员决定,所以,这个共用体占用的存储空间由成员 w 决定,是 4 个字节
                                         // 共用体 w 和 part 两个成员将会使用同一个储存空间 (4 个字节),可以视为对同一个变量的两个不同性质的引用  
        p = & n                        ; // p 指向共用体 n
        n . w = num                    ; // 为共用体 n 的 w 成员赋值为输入参数 num
                                         // num 的值为 0x23456789,我们使用的 PC 采用 Little Indian 编码,这 4 个字节在内存中的实际顺序为:89 67 45 23
                                         // 也就是说,共用体 n 内存中 4 个字节的内容为 89 67 45 23,其中,part 成员由 2 个 2 个字节的成员构成,于是,
                                         // n . part[0] : 89 67,值为 0x6789,n . part[1] : 45 23,值为 0x2345 
        printf("num = 0x%x\n" , num)     ;
        printf("low-part num = 0x%0x , high - part num = 0x%0x\n" , p-> part[0] , p -> part[1]) ;
}

int main()
{
        unsigned int  x ;
        x = 0x23456789  ;
        partition(x)    ;
        return 0        ;
}
        编译运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
num = 0x23456789
low-part num = 0x6789 , high - part num = 0x2345

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表