这是个id 2021-08-02 21:48 采纳率: 100%
浏览 114
已结题

共用体输出,高8位,低8位

有知道下面这个程序为什么输出13吗?

#include <stdio.h>

union pw
{
    int i;
    char ch[2];
}a;
void main() {
    a.ch[0] = 13;
    a.ch[1] = 0;
    printf("%d\n", a.i);
}
  • 写回答

1条回答 默认 最新

  • 八云黧 2021-08-02 22:08
    关注

    Union是联合体,表示i和ch共用一段内存空间,当通过联合体调用i时,将字节解释为int,否则解释为char数组。int共4字节,一个char一字节,2个char的数组共2字节,所以联合体pw共占用4字节
    main函数中13占用了整个空间的第一个字节,0占用第二个字节,剩下2个字节默认为0
    a的内存空间分配如下
    |地址|&a|&a+1|&a+2|&a+3|
    |数据|13|0|0|0|
    一般来说机器都是小端法储存数字,即低位字节存在前面(低地址),高位字节存在后面(高地址)
    所以a.i得到的整数是0 0 0 13这些二进制位拼接成的整数13,所以返回13
    再举个栗子,当你main函数中的代码换成a.ch[1]=13时
    a的内存空间分配如下
    |地址|&a|&a+1|&a+2|&a+3|
    |数据|0|13|0|0|
    所以此时调用a.i就是0 0 13 0的二进制位拼接成的整数,相当于13左移8位(即乘2的8次幂256),结果是3328

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月11日
  • 已采纳回答 8月3日
  • 创建了问题 8月2日

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?