目录
一个面试题如下
int main()
{
int i = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
for (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("hello bit\n");
}
return 0;
}
问这段代码最后输出结果是什么,因为在栈中地址是由高相低存放的先为arr数组创建了地址,然后才是i的空间;
大端与小端的存储
什么大端小端:
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址
中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位
,
,保存在内存的高地
址中。
为什么有大端和小端:
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元
都对应着一个字节,一个字节为
8
。但是在
C
语言中除了
8 bit
的
char
之外,还有
16 bit
的
short
型,
32 bit
的
long
型(要看具体的编
译器),另外,对于位数大于
8
位
的处理器,例如
16
位或者
32
位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如
何将多个字节安排的问题。因此就
导致了大端存储模式和小端存储模式。
例如:一个
16bit
的
short
型
x
,在内存中的地址为
0x0010
,
x
的值为
0x1122
,那么
0x11
为
高字节,
0x22
为低字节。对于大端
模式,就将
0x11
放在低地址中,即
0x0010
中,
0x22
放在高地址中,即
0x0011
中。小端模式,
刚好相反。我们常用的
X86
结构是
小端模式,而
KEIL C51
则为大端模式。很多的
ARM
,
DSP
都为小端模式。有些
ARM
处理器还可以
由硬件来选择是大端模式还是小端
模式。
一般企业面试可能会让你判断机器是大端存储还是小端存储,可以用以下代码验证
![](https://i-blog.csdnimg.cn/blog_migrate/8abd9a16ce07baddfeaed03f0f941ce1.png)
通过以上代码我们可以断定那我们现在所用机器就是使用小端存储模式
几个练习可以更让我们深入了解代码储存形式
上面char a打印出来为-1,是因为整形赋给字符型是要发生截断的,因为数据在内存中都是以二进制补码方式进行存放,而整形为32个bit位,赋给a时会发生截断,然后再以最高位进行整形提升,提升之后再转换为源码方式进行打印,所以上面a与b打印结果是相同的。
而c打印出来为255,是因为它是一个无符号数进行打印的,无符号数最高位不是符号位,所以当它发生截断再进行整形提升的时候,高位补的为0,又因为无符号数原,反,补相同,所以打印出来为255。
浮点型数据存储
emo