骤跌 2023-02-03 15:39 采纳率: 75%
浏览 57
已结题

以下编程,我做出来认为是13,为什么运行出来是3328

#include<stdio.h>

union pw

{

int i;

char ch[2];

} a;

int main ( )

{

a.ch[0] = 0;

a.ch[1] = 13;

printf ( "%d\n", a.i ) ;

return 0;

}

  • 写回答

4条回答 默认 最新

  • 程序员星辰 2023-02-03 16:17
    关注

    因为使用的是联合体,特点是所有成员共享同一块内存。当你在代码中将 a.ch[0] 设置为 0 时,实际上也在清空 a.i 的值,接下来当你在代码中将 a.ch[1] 设置为 13 时,a.i 的值就变成了 3328。因为 a.i 和 a.ch[1] 共享相同的内存,修改了 a.ch[1],实际上也修改了 a.i。

    在这个例子中,由于您将 a.ch[1] 设置为 13,所以二进制表示为 00001101。在大多数计算机系统中,int 类型是使用 4 个字节存储的,因此 a.i 就是:

    0000 0000 0000 0000 0000 0000 0000 1101

    由于您在前面将 a.ch[0] 设置为 0,所以实际上 a.i 的值就是:

    0000 0000 0000 0000 0000 0000 0000 1101

    十进制表示为 3328。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

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