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 關注
- 209 瀏覽
添加回答
舉報
0/150
提交
取消