要不, 我們從右往左書寫陣列

2021-09-16 14:25:18 字數 2584 閱讀 3417

這個就有意思了, 我們發現, 我們如果換一種書寫方式, 可以更直觀理解陣列在記憶體中模樣.

var buffer = new arraybuffer(12);

var x1 = new int32array(buffer);

x1[0] = 1;

var x2 = new uint8array(buffer);

x2[0] = 2;

x1[0] // 2

顯而易見, 上述寥寥**的主要內容是在闡述typedarray僅僅作為 arraybuffer 檢視讀寫記憶體的道理. x1和x2公用了同一段記憶體._

而我今天想說這裡有乙個很有意思的事情.

大家公認的概念, 也是計算機基礎理論知識的一部分.

記憶體中使用8個二進位制位(bit)表示乙個位元組(byte).

uint8 是使用乙個位元組表示的無符號整數

uint32 則是使用了4個位元組表示的無符號整數

我們使用無符號整數這樣簡單的資料結構, 來看看剛剛的賦值過程做了什麼.

x1[0] = 1
我們知道, x1是乙個 int32檢視, 所以第乙個元素的長度是四個位元組. 也就是說, 該部分的值是0x000001.

高位低位

0000

0001

x2[0] = 2
我們知道, x2是乙個 int8檢視, 所有第乙個元素的長度是乙個位元組, 也就是說, 該部分的值是0x02.

瞧, 現在 x1[0] 應該變成什麼樣?

0x00000002?

高位低位

0000

0002

還是0x02000001?

高位低位

0200

0001

這個問題的本質, 即 __記憶體中, int32資料型別內部的四個位元組, 是低位在前, 還是高位在前?__.

如果是高位在前, 則x2[0]指向的是 x1[0]最高位的位元組. 反之, 則是指向的最低位.

關於位元組序, 在計算機的世界裡有這樣一種定義和區分.大端序/小端序.

詳細設定我們參考 (wiki)[ 就好.

我們絕大多數時候再現代計算機上使用的位元組, 都是小端序.

而網路傳輸中使用的是大端序, 如 ip 報頭

假設我們有乙個 uint16array(3)

var x3 = new uint16array([11, 22, 33]);
我們在草稿紙上會這麼寫

x3[0]

x3[1]

x3[2]

1122

33 也就是說我們習慣性把第一元素寫在左邊. 換成十六進製制的寫法就是

如果現在沒看出來為什麼我想說從左到右書寫陣列會造成有趣的誤解, 那我再試著用二進位制方式把這個陣列寫出來 :)

注意,最左邊乙個格仔是 x3[0] 哦! 這時候, 我們試著使用x2這樣的 uint8array 檢視來解讀這個陣列.

正確的解讀應該是

00001011

00000000

00010000

00000000

00100001

00000000

0x0b

0x00

0x16

0x00

0x21

0x00110

220330

而不是

00000000

00001011

00000000

00010000

00000000

00100001

0x00

0x0b

0x00

0x16

0x00

0x21011

022033

因為, 小端位元組序的設計中, __低位在前__.

所以, 如果我們一開始就在腦海中將所構思的陣列從右往左書寫

x3[2]

x3[1]

x3[0]

3322

110x0021

0x0016

0x000b

00000000 00100001

00000000 00010000

00000000 00001011

改變資料型別去解讀的結果則是

x2[5]

x2[4]

x2[3]

x2[2]

x2[1]

x2[0]

00000000

00100001

00000000

00010000

00000000

00001011

0x00

0x21

0x00

0x16

0x00

0x0b033

022011

看! 完全不會有交換位元組帶來的誤解!

從右往左擷取字元 excel從右邊查詢字元並擷取

公式 left a1,find a1 1 trim right substitute a3,rept len a3 len a3 1.先解一下trim函式的格式 其語法格式 trim text text 要去除空格的文字。2.rept函式的語法格式 rept text,number times re...

從右往左讀的文字正寫豎排效果

香子子 短令 林雨堂 伯牙抱琴 偶過寒門 行到處 全不經心 憑幾閒坐 談古論今 任倦則眠 樂則飲 醉則吟 矮矮垣牆 小小軒窗 翠蔭處 青草池塘 柳煙初碧 曲岸新妝 枕一樹風 一彎月 一簟涼 玉階金堂 畫棟雕梁 怎麼那 綠茵芬芳 茅簷低小 竹里深藏 對春日麗 秋雨急 北風狂 如夢浮生 閒愁怎平 依畫檻...

為什麼CSS選擇器是從右往左解析

一 css選擇器的解析順序 相信很多人在一開始接觸css的時候都會看到一條規則就是盡量少使用層級關係,比如盡量不要寫成 div p.class 而是寫成 class 之所以需要這麼寫,給的解釋是這樣可以減少選擇器匹配的次數 推薦乙個css規範的 初看覺得哦,有點道理啊,但是往細了再想想 如果我把層級...