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 是内存实际值的真实反映。可以自己去看内存。
哈士奇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进制数的形式输出
}
- 2 回答
- 0 关注
- 244 浏览
添加回答
举报
0/150
提交
取消
