文章目錄
- 為什么有大端小端?
- 大端:低位放在高地址,高位放在低地址
- 小端:低位放在低地址,高位放在高地址
- 面試考點:
- 代碼
- 代碼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