C++ union中char数组赋值后int值的生成逻辑咨询
解析Union中int值16448的生成逻辑
核心前提:
- '@'的ASCII码为十进制64(十六进制
0x40)。 - 你的
union float_u实例data1是全局变量,全局变量会被默认初始化为0,因此未赋值的a[2]和a[3]对应的内存字节值为0。 - 当前系统采用小端字节序(x86/x86_64架构默认都是小端):内存低地址存储整数的低字节,高地址存储整数的高字节。
- 从输出
Size of union :4可知,int类型占4字节,union的所有成员共享这4字节内存空间。
- '@'的ASCII码为十进制64(十六进制
内存布局与值的计算:
赋值data1.a[0] = '@'和data1.a[1] = '@'后,4字节内存的分布如下:内存地址(从低到高) 字节值(十六进制) 对应数组元素 低地址 0x40a[0]次低地址 0x40a[1]次高地址 0x00a[2]高地址 0x00a[3]小端序下,整数的字节需按高地址到低地址的顺序拼接成完整值,即
0x00 0x00 0x40 0x40,组合为十六进制整数0x00004040。
转换为十进制计算:0x4040 = 64*256 + 64 = 16384 + 64 = 16448,这就是你看到的输出结果。
内容的提问来源于stack exchange,提问作者Rajendra Aware
相关产品推荐
相关产品推荐

