本帖最后由 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>
|