为了账号安全,请及时绑定邮箱和手机立即绑定

如下程序,运行结果是多少?为什么?

如下程序,运行结果是多少?为什么?

慕神8447489 2022-05-11 19:15:41
main() { union bt { int k; char c[2]; }a; a.k=-7; printf("%o,%o\n",a.c[0],a.c[1]); }
查看完整描述

2 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

Union是共用空间的。
和Struct不同。

共有4个字节,
第一个字节 k [0..7]位 和 c[0] 共用
第二个字节 k [8..15]位 和 c[1] 共用。
第三个字节 k [16..23]位。
第四个字节 k [24..31]位。

-7内部机器补码为 FF FF FF F9 先低后高存放。
VC编译器会在printf的时候自动转为int型的变量。

a.k=-7;
printf("%o,%o\n",a.c[0],a.c[1]);
printf("%02X,%02X\n",(unsigned char)a.c[0], (unsigned char)a.c[1]);

的执行结果是:
37777777771,37777777777
F9,FF

F9 FF 是内存实际值的真实反映。可以自己去看内存。

查看完整回答
反对 回复 2022-05-16
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

#include<iostream.h>
#include<stdio.h>
void main()
{
union bt
{
int k;
char c[2];
}a;
a.k=-7;
printf("%o,%o\n",a.c[0],a.c[1]); //a.c[]没有初始化,输出的就是一个随机值。 %o是以8无符号8进制数的形式输出
}



查看完整回答
反对 回复 2022-05-16
  • 2 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号