内存数据对齐

来源:百度知道 编辑:UC知道 时间:2024/05/17 20:47:43
#include<stdio.h>
void main()
{
short int i=65535;
printf("%x",i);
}
输出是多少?为什么?详细点,谢谢了
65535装换成16进制是ffff吧?看清楚了,这是内存对齐的问题

是这样的:

65535转换成16进制确实是ffff。但是,输出却是ffffffff,为什么呢?

其实和printf参数输入有关。按C的规定,其参数输入的时候,都是按照可能的最高精度进行按值传入的。

也就是说,short int 是16位,会被扩展为32位的int,然后按值传入。

由于是有符号数,因此按符号扩展就由0xffff扩展为0xffffffff了,然后传入,按照16进制显示输出就变成了8个f。

-------
不信可以把short int 改为int,那么输出就是4个f,因为不需要按符号扩展。
或者把short int前面加上无符号说明 unsigned,这样按无符号扩展,0xffff会被扩展为0x0000ffff,输出还是4个f。

fff

65535转换成16进制是ffffffff,
printf("%x",i); 是以16进制输出i值得,所以输出是ffffffff

输出:ffffffff
printf("%x",i); 以16进制的方式输出i

prinf("%d",i); 10进制 65535