高地址和低地址、高字节低字节、大小端模式的转换,存储顺序
參考博客
https://blog.csdn.net/ce123_zhouwei/article/details/6971544
https://my.oschina.net/alphajay/blog/5478
一、高地址和低地址
?
二、高字節(jié)低字節(jié)
如int a=16777220,化為十六進(jìn)制是0x01?00 00 04則04屬于低字節(jié),01屬于高字節(jié)
?
三、大小端模式
(1)如果a在內(nèi)存中的存放順序?yàn)橄聢D(即低字節(jié)存放在高地址),則為大端模式
(2)如果a在內(nèi)存中的存放順序?yàn)橄聢D(即低字節(jié)存放在低地址),則為小端模式
(3)如何互換(通過移位操作再或)
四、存放順序
1、原則
(1)一個(gè)整數(shù)類型內(nèi)部
低地址存儲(chǔ)低位,高地址存儲(chǔ)高位。比如int a=1,則存儲(chǔ)情況為0000(高地址) 0000 0000 0001(低地址)
(2)若干個(gè)局部變量(在棧中存儲(chǔ)的)
先定義的高地址,后定義的低地址
(3)類、結(jié)構(gòu)體或數(shù)組的元素
先定義的低地址,后定義的高地址
?
五、測(cè)試說明
(1)整數(shù)類型內(nèi)部:低地址存儲(chǔ)低位,高地址存儲(chǔ)高位。
#include<iostream> using namespace std;union U {char str[2];short int num; };int main() {U u;u.str[0] = 10;//存放在低地址,0000 1010u.str[1] = 1;//存放在高地址, 0000 0001cout << u.num << endl;//組合的時(shí)候,整數(shù)類型內(nèi)部低地址存儲(chǔ)低位,高地址存儲(chǔ)高位,因此是0000 0001 0000 1010 = 266system("PAUSE");return 0; }(2)若干個(gè)局部變量(在棧中存儲(chǔ)的):先定義的高地址,后定義的低地址。
類、結(jié)構(gòu)體、數(shù)組中的元素:先定義的低地址,后定義的高地址
class Test { public:int m;int n; }; int main() {int a;char b;int c[10];Test t;cout << (size_t)&a << endl;//結(jié)果1cout << (size_t)&b << endl;//結(jié)果2cout << (size_t)&c << endl;//結(jié)果3cout << (size_t)&t << endl;//結(jié)果4cout << (size_t)&t.m << endl;//結(jié)果5cout << (size_t)&t.n << endl;//結(jié)果6system("PAUSE");return 0; }結(jié)果1>結(jié)果2>結(jié)果3>結(jié)果4=結(jié)果5<結(jié)果6
分析:
結(jié)果1>結(jié)果2>結(jié)果3>結(jié)果4,是因?yàn)閍、b、c、t都是局部變量,在棧上存儲(chǔ),棧是從高地址到低地址,因此地址逐漸減小。
結(jié)果5<結(jié)果6,是因?yàn)榻Y(jié)構(gòu)體內(nèi)部,先定義的地址小,后定義的地址大,這與類內(nèi)的成員,數(shù)組總的元素,都是類似的。? ????
分析它們的數(shù)值差,可以發(fā)現(xiàn)字節(jié)對(duì)齊問題,數(shù)組名占用4字節(jié)等問題。
總的來說,具體的地址,需要考慮“棧的高地址到低地址”、“字節(jié)對(duì)齊”、“數(shù)組”這樣的特殊情況等等。
?
總結(jié)
以上是生活随笔為你收集整理的高地址和低地址、高字节低字节、大小端模式的转换,存储顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Anaconda下载安装Pytorch遇
- 下一篇: C语言函数的递归