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;
















