22 大端序和小端序
分析下列程序,輸出結(jié)果(AC)
#include<stdio.h> #include<stdlib.h> union X{int32_t a;struct {int16_t b;int16_t c;}; }; int main() {X x;x.a=0x20150810;printf("%x,%x\n",x.b,x.c); }A 2015,810 B50810,201 C810,2015 D20150,810
?
分析:?Little-Endian:?低地址存放低位、Big-Endian:?低地址存放高位
32bit寬的數(shù)0x12345678
在Little-endian模式CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開始存放)為:
????????????????????????????????????????? 內(nèi)存地址 ?? ?0x4000 ?? ?0x4001 ?? ?0x4002 ?? ?0x4003
????????????????????????????????????????? 存放內(nèi)容 ?? ?0x78?? ? ?? 0x56 ? ? ?? 0x34 ?? ? ?? 0x12
而在Big- endian模式CPU內(nèi)存中的存放方式則為:
????????????????????????????????????????? 內(nèi)存地址 ?? ?0x4000 ?? ?0x4001 ?? ?0x4002 ?? ?0x4003
????????????????????????????????????????? 存放內(nèi)容 ?? ?0x12 ?? ???? 0x34 ?? ??? 0x56 ?? ? ?? 0x78
?
0x20150810
如果按照大端模式存儲:從低地址到高地址:20 15 08 10
????? ? ??????????????????????? ? 輸出從低地址到高地址:20 15 08 10
如果按照小端模式存儲:從低地址到高地址:10 08 15 20?
????????????????????????????????? 輸出從高地址到低地址:08 10 20 15
?
為什么小端序是從高地址輸出,大端序是從地低地址輸出?
因為你的存儲順序都不同,如果按照相同的方式讀取(比如從高到低),那讀取來的結(jié)果就有兩種可能,那么必有一種錯了啊。題里是把一個int讀成兩個short,所以有兩種可能。但是假如int讀成int,無論是大端小端,絕對僅由一種結(jié)果。
?
---------------------------------------------------------------------------------------------------------------------------
#include<stdio.h> int fun(char s[]) {char *p=s;while(*p!=0) p++;return (p-s); } main() {printf("%d\n",fun("OABCDEF")); }最后輸出結(jié)果是7.
?
------------------------------------------------------------------------------------------------------------------------
一個算法應(yīng)該具有以下五個重要的特征:
1、有窮性: 一個算法必須保證執(zhí)行有限步之后結(jié)束;
2、確切性: 算法的每一步驟必須有確切的定義;
3、輸入:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定除了初始條件;
4、輸出:一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的;
5、可行性: 算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成。
?
轉(zhuǎn)載于:https://www.cnblogs.com/dd2hm/p/7277248.html
總結(jié)
以上是生活随笔為你收集整理的22 大端序和小端序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java byte 梳理
- 下一篇: HTMLTestRunner测试报告