共用体,为什么结果是-2,-2,-1

img

四字节int下,-2的补码是0xFFFFFFFE(补码是反码加1。例如2,二进制是00000000 00000000 00000000 00000010,反码就是11111111 11111111 11111111 11111101,也即二进制形式所有位全部取反;加上1的结果是11111111 11111111 11111111 11111110,换算成十六进制就是 0xFFFFFFFE)。那么,由于intel机器是小端序,其存储结构从低地址写出来就是FE FF FF FF。a.a显然是-2本身,不必多说。a.c[0]作为8位有符号整数看待,就是0xFE作为整数,我们从补码找回原值(既然补码是反码加1,原值自然是补码减1再取反。注意:非负整数的原码、反码、补码是一致的),得到-2。a.c[1]是0xFF,作为8位整数看待,就是-1的补码咯。因此,结果是-2 -2 -1。