续火花 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日

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥15 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)