c/c++和其他語言最大區(qū)別在于: 指針
指針就是內(nèi)存地址捧毛,一旦明白了指針與內(nèi)存地址相關的內(nèi)容,那理解其他語言让网,就易如反掌呀忧。
而且你可以把其他語言用的更加好,更加有效率
例如java/js/objc中為什么容器中只能存儲引用類型?
如果存儲基本數(shù)據(jù)類型(值類型),為什么會發(fā)生效率很低的裝箱拆箱行為溃睹?
而c#為什么就不會呢?
你怎么才能讓不使用的內(nèi)存盡快被垃圾收集器回收過去?
還有很多涉及內(nèi)存相關的內(nèi)容而账,例如堆分配,棧分配等........
根據(jù)經(jīng)驗:
如果你一開始學的是c/c++因篇,并且有這一定的c語言運行庫(crt)及stl庫的使用經(jīng)驗泞辐,那么轉其他語言基本上只要熟悉一下語法就能快速上手
如果你有幾年開發(fā)經(jīng)驗,想更上一層樓竞滓,那么學習c/c++是必要的選擇咐吼。由于有程序的經(jīng)驗,學習c/c++并不算很難
本篇目的:
- 什么是大端【Big-endian】小端【Little-endian】
- 搞明白大端小端(關鍵是理解高/低字節(jié)以及高/低地址)
大小端的定義(來自百度百科的定義):
大端:【高低低高|左左右右】
數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址中虽界,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的高地址中小端:【高高低低|左右右左】
數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址中汽烦,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的低地址中
是不是感覺很繞口啊涛菠,特難理解吧莉御!
理解大小端的關鍵點是明白:
- 什么是高低地址
- 什么是高低字節(jié)
高地址,低地址:
- 計算機中最基礎的存儲單位是字節(jié)(byte)
1 byte = 8 bit,00000000->11111111,表示范圍[0,255] - 對內(nèi)存中的每一個字節(jié)(byte)俗冻,都有一個索引編號礁叔,這就是傳說中的指針,也就是地址
很容易理解高低地址了吧迄薄,就是書寫順序
高字節(jié)琅关,低字節(jié):
- 對于一個字節(jié)(char/unsigned char/bool)的數(shù)據(jù)類型來說,是沒有高低字節(jié)之分的
- 只有大于一個字節(jié)以上的數(shù)據(jù)類型(我們下面以unsigned int來舉例說明)才要區(qū)分高低字節(jié)
大端讥蔽,小端
//第一個RGBA為unsigned int類型
typedef unsigned int RGBA;
//220 = DC
//110 = 6E
// 53 = 35
// FF = 255
RGBA rgba = 0xDC6E35FF
高低字節(jié)是:左高右低
高低地址是:左低右高
根據(jù)大端的定義:
數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址中涣易,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的高地址中
則內(nèi)存存儲的方式是:
DC是最高字節(jié)[最左],放在內(nèi)存的最低地址[最左]
FF是最低字節(jié)[最右]冶伞,放在內(nèi)存的最高地址[最右]
按照這個規(guī)則新症,很容易知道,大端在內(nèi)存存儲的順序是:
DC|6E|35|FF(和rgba = 0xDC6E35FF一致的順序)
根據(jù)小端的定義:
數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址中响禽,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的低地址中
則內(nèi)存存儲的方式是:
DC是最高字節(jié)[最左]徒爹,放在內(nèi)存的最高地址[最右]
FF是最低字節(jié)[最右]荚醒,放在內(nèi)存的最低地址[最左]
按照這個規(guī)則,很容易知道隆嗅,小端在內(nèi)存存儲的順序是:
FF|35|6E|DC(和rgba = 0xDC6E35FF相反的順序)
這樣就很清楚的了解了大端和小端的含義了=绺蟆!
口訣:
先字節(jié)后地址:
- 大端: 高低低高|左左右右|方向一致
- 小端: 高高低低|左右右左|方向相反
附:今天老師帶隊一起寫生去 文章我昨天半夜寫的