struct s
{
short a:8;
short b:4;
short c:4;
{
short a:8;
short b:4;
short c:4;
};
fstream fs("test", ios::binary | ios::in | ios::out);
if(!fs)
{
cerr<<"::>_<::"<<endl;
exit(1);
}
s ss;
fs.read((char*) &ss, 2);
若test存储格式为AB CD
则a=-85,b=-3,c=-4
因为C语言总是从低位开始读取数据,首先读取一个字节0xAB,由于a是8位,故a=0xAB,又因为a是short(有符号),所以0xAB应该是补码,取反加一后a=-85;再读取一个字节0xCD,由于b是4位,故将低四位D赋给b,b=D,因为b是short(有符号),所以D(1101)为补码,取反加一后b=-3,c同理。