1)简述大小端字节序的区别:

  大端字节序:把数据的低位字节序的内容存放在高地址处,高位字节序的内容存放在低地址处; 

  小端字节序:把数据的低位字节序的内容存放在低地址处,高位字节序的内容存放在高地址处;

2)char a=-1,和unsigned char b=-1;

 通过printf("a=%d ,b=%d",a,b)打印出来的结果需要进行整形提升,而b进行的是无符号整形提升,在unsigned char b的情况下补的是二进制的0:

11111111-> 00000000000000000000000011111111;(此时符号位为0,正数,打印结果为原码因此结果一样);

因此结果为:255;

而char a进行的是有符号位整形提升,在内存中二进制11111111情况下整形  提升补的全是1->11111111111111111111111111111111(补码),此时的 符  号位为负数,打印结果显示的是原码,还需要进行转换:                                 ->1111111111111111111111111111110(反码);

   ->1000000000000000000000000000001(原码);

 因此结果为:-1;

 (补充):char到底是signed char还是unsigned char?c语言中没有标准的规定过,取决于编译器;

   int和short都是signed(有符号)的;

3)整形与浮点型数据在内存中的存放方式:

  重点!:整形在内存中的存放方式为补码,打印的结果为原码;

  重点!:浮点型在内存中的存放方式为S,M,E

(float类型的数据为4个字节,S占一位,E站8位,M占23位)

(double类型的数据为8个字节,S占一位,E占11位,M占52位)

 例:float b=9.0;

  1001.0->经过算术转换为1.001*2^3,

  因为是正数,二进制位S为0 ,E为(3+127=130)10000010,M为              001 0000 0000 0000 0000 0000;

 因此9.0在内存中的存放为(二进制):0100 0001 0001 0000 0000 0000 0000 0000;

十六进制为:41 10 00 00;(因为大部分的机器为小端字节序因此高地址放在内存中也为高地址)->00 00 10 41;