文章目录
- 为什么有大端小端?
- 大端:低位放在高地址,高位放在低地址
- 小端:低位放在低地址,高位放在高地址
- 面试考点:
- 代码
- 代码2
- 一道面试题
为什么有大端小端?
大端:低位放在高地址,高位放在低地址
小端:低位放在低地址,高位放在高地址
11223344
面试考点:
- 1.阐述概念
- 2.写一个程序判断当前机器是大端还是小端
- 3.你在什么时候遇到过大端小端的概念
代码
#include <stdio.h>
#include <stdlib.h>int check_sys()
{int i = 1;return *(char *)&i;
}
int main()
{int ret = check_sys();if (ret == 1)printf("小端\n");elseprintf("大端\n");system("pause");return 0;
}
代码2
#include <stdio.h>
#include <stdlib.h>
check_sys()
{union{int i;char c;} Un;Un.i = 1;return Un.c;
}int main()
{int ret = check_sys;if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}
一道面试题
int main()
{int a[4] = { 1,2,3,4 };int *ptr1 = (int *)(&a + 1);int *ptr2 = (int *)((int)a + 1);printf("%x,%x", ptr1[-1],*ptr2);system("pause");
}
int *ptr1 = (int *)(&a + 1);
取出数组的地址加1,指向了数组元素4后面的位置即ptr[0]
输出ptr1[-1]
则输出了4。
int *ptr2 = (int *)((int)a + 1);
数组a的首元素加1指向了2;
二进制:0000 0000 0000 0000 0000 0000 0000 0010
16进制:00 00 00 02
小端存储:02 00 00 00;
打印出来的结果就是 02000000