成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

要不, 我們從右往左書(shū)寫(xiě)數(shù)組?

walterrwu / 1409人閱讀

摘要:這個(gè)就有意思了我們發(fā)現(xiàn)我們?nèi)绻麚Q一種書(shū)寫(xiě)方式可以更直觀(guān)理解數(shù)組在內(nèi)存中模樣事件起因前些天閱讀一本相關(guān)書(shū)籍的時(shí)候看到這么一段話(huà)顯而易見(jiàn)上述寥寥代碼的主要內(nèi)容是在闡述僅僅作為視圖讀寫(xiě)內(nèi)存的道理和公用了同一段內(nèi)存而我今天想說(shuō)這里有一個(gè)很有意思的事

這個(gè)就有意思了, 我們發(fā)現(xiàn), 我們?nèi)绻麚Q一種書(shū)寫(xiě)方式, 可以更直觀(guān)理解數(shù)組在內(nèi)存中模樣.

事件起因

前些天閱讀一本js 相關(guān)書(shū)籍的時(shí)候, 看到這么一段話(huà).

var buffer = new ArrayBuffer(12);

var x1 = new Int32Array(buffer);
x1[0] = 1;

var x2 = new UInt8Array(buffer);
x2[0] = 2;

x1[0] // 2

顯而易見(jiàn), 上述寥寥代碼的主要內(nèi)容是在闡述 TypedArray僅僅作為 ArrayBuffer 視圖讀寫(xiě)內(nèi)存的道理. x1和x2公用了同一段內(nèi)存._

而我今天想說(shuō)這里有一個(gè)很有意思的事情.

字節(jié)序

大家公認(rèn)的概念, 也是計(jì)算機(jī)基礎(chǔ)理論知識(shí)的一部分.

內(nèi)存中使用8個(gè)二進(jìn)制位(bit)表示一個(gè)字節(jié)(Byte).

UInt8 是使用一個(gè)字節(jié)表示的無(wú)符號(hào)整數(shù)

UInt32 則是使用了4個(gè)字節(jié)表示的無(wú)符號(hào)整數(shù)

我們使用無(wú)符號(hào)整數(shù)這樣簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu), 來(lái)看看剛剛的賦值過(guò)程做了什么.

x1[0] = 1

我們知道, x1是一個(gè) Int32視圖, 所以第一個(gè)元素的長(zhǎng)度是四個(gè)字節(jié). 也就是說(shuō), 該部分的值是 0x000001.

高位 低位
00 00 00 01
x2[0] = 2

我們知道, x2是一個(gè) Int8視圖, 所有第一個(gè)元素的長(zhǎng)度是一個(gè)字節(jié), 也就是說(shuō), 該部分的值是 0x02.

瞧, 現(xiàn)在 x1[0] 應(yīng)該變成什么樣?

0x00000002 ?

高位 低位
00 00 00 02

還是 0x02000001 ?

高位 低位
02 00 00 01

這個(gè)問(wèn)題的本質(zhì), 即 __內(nèi)存中, Int32數(shù)據(jù)類(lèi)型內(nèi)部的四個(gè)字節(jié), 是低位在前, 還是高位在前?__.

如果是高位在前, 則x2[0]指向的是 x1[0]最高位的字節(jié). 反之, 則是指向的最低位.

關(guān)于字節(jié)序, 在計(jì)算機(jī)的世界里有這樣一種定義和區(qū)分. 大端序/小端序.

詳細(xì)設(shè)定我們參考 (wiki)[https://zh.wikipedia.org/wiki... 就好.

我們絕大多數(shù)時(shí)候再現(xiàn)代計(jì)算機(jī)上使用的字節(jié), 都是小端序.

而網(wǎng)絡(luò)傳輸中使用的是大端序, 如 IP 報(bào)頭

瞧, 書(shū)寫(xiě)一個(gè)數(shù)組試試.

假設(shè)我們有一個(gè) UInt16Array(3)

var x3 = new UInt16Array([11, 22, 33]);

我們?cè)诓莞寮埳蠒?huì)這么寫(xiě)

x3[0] x3[1] x3[2]
11 22 33

也就是說(shuō)我們習(xí)慣性把第一元素寫(xiě)在左邊. 換成十六進(jìn)制的寫(xiě)法就是

0x000B 0x0016 0x0021

如果現(xiàn)在沒(méi)看出來(lái)為什么我想說(shuō)從左到右書(shū)寫(xiě)數(shù)組會(huì)造成有趣的誤解, 那我再試著用二進(jìn)制方式把這個(gè)數(shù)組寫(xiě)出來(lái) :)

00000000 00001011 00000000 00010000 00000000 00100001

注意,最左邊一個(gè)格子是 x3[0] 哦! 這時(shí)候, 我們?cè)囍褂脁2這樣的 UInt8Array 視圖來(lái)解讀這個(gè)數(shù)組.

正確的解讀應(yīng)該是

00001011 00000000 00010000 00000000 00100001 00000000
0x0B 0x00 0x16 0x00 0x21 0x00
11 0 22 0 33 0

而不是

00000000 00001011 00000000 00010000 00000000 00100001
0x00 0x0B 0x00 0x16 0x00 0x21
0 11 0 22 0 33

因?yàn)? 小端字節(jié)序的設(shè)計(jì)中, __低位在前__.

所以, 如果我們一開(kāi)始就在腦海中將所構(gòu)思的數(shù)組從右往左書(shū)寫(xiě)

x3[2] x3[1] x3[0]
33 22 11
0x0021 0x0016 0x000B
00000000 00100001 00000000 00010000 00000000 00001011

改變數(shù)據(jù)類(lèi)型去解讀的結(jié)果則是

x2[5] x2[4] x2[3] x2[2] x2[1] x2[0]
00000000 00100001 00000000 00010000 00000000 00001011
0x00 0x21 0x00 0x16 0x00 0x0B
0 33 0 22 0 11

看! 完全不會(huì)有交換字節(jié)帶來(lái)的誤解!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84704.html

相關(guān)文章

  • 【從基礎(chǔ)學(xué) Java】運(yùn)算符和數(shù)據(jù)類(lèi)型

    摘要:是一種強(qiáng)類(lèi)型語(yǔ)言,因此,定義了基本數(shù)據(jù)類(lèi)型。運(yùn)算符先從運(yùn)算符談起。基本數(shù)據(jù)類(lèi)的基本數(shù)據(jù)類(lèi)型同其它高級(jí)程序語(yǔ)言比較類(lèi)似。常用類(lèi)類(lèi)型除了一些基本數(shù)據(jù)類(lèi)型,提供的一些類(lèi)類(lèi)型,使用頻率也很高。 Java 是一種強(qiáng)類(lèi)型語(yǔ)言,因此,Java 定義了基本數(shù)據(jù)類(lèi)型。同時(shí), Java 和其它高級(jí)計(jì)算機(jī)語(yǔ)言一樣,有多種運(yùn)算符,這在我們編程過(guò)程中極為有用。 運(yùn)算符 先從運(yùn)算符談起。 顧名思義,運(yùn)算符解決的是...

    izhuhaodev 評(píng)論0 收藏0
  • leetcode390.Elimination Game

    摘要:題目要求假設(shè)有一共個(gè)數(shù)字,從左往右開(kāi)始每隔一位刪除一個(gè)數(shù)字,到達(dá)最右側(cè)后,再?gòu)挠彝竺扛粢晃粍h除一個(gè)數(shù)字,如此反復(fù),直到剩下最后一個(gè)數(shù)字。由此可見(jiàn),假如我們定義一個(gè)遞歸函數(shù)我們可以有來(lái)獲取結(jié)果。 題目要求 There is a list of sorted integers from 1 to n. Starting from left to right, remove the fir...

    Godtoy 評(píng)論0 收藏0
  • Lodash學(xué)習(xí)筆記 - slice函數(shù)

    摘要:文檔地址中文文檔英文文檔源碼地址第一個(gè)函數(shù)是,不過(guò)源碼中依賴(lài)了,所以第一篇文章就從開(kāi)始。這個(gè)函數(shù)的作用就是裁剪數(shù)組,從下標(biāo)開(kāi)始,到下標(biāo)結(jié)束,但是并不包含,并將結(jié)果作為一個(gè)數(shù)組返回。并且注明了這個(gè)方法用于代替來(lái)確保數(shù)組正確返回。 百忙之中(閑來(lái)無(wú)事)想抽點(diǎn)時(shí)間好好讀一下源碼,于是就選了Lodash來(lái)寫(xiě)一個(gè)系列罷。讀源碼順序就按照l(shuí)oadsh文檔順序來(lái)。 文檔地址:中文文檔?? 英文文檔源...

    lei___ 評(píng)論0 收藏0
  • ES6之對(duì)象的擴(kuò)展(上)

    摘要:狹義的對(duì)象字面量形式是中我最喜歡的一種結(jié)構(gòu),因?yàn)槠潇`活。今天準(zhǔn)備介紹中對(duì)象的擴(kuò)展相關(guān)的知識(shí)點(diǎn),由于煲劇晚了,先寫(xiě)一半,剩下的下次再介紹。 狹義的對(duì)象字面量形式是JavaScript中我最喜歡的一種結(jié)構(gòu),因?yàn)槠潇`活。今天準(zhǔn)備介紹ES6中對(duì)象的擴(kuò)展相關(guān)的知識(shí)點(diǎn),由于煲劇晚了,先寫(xiě)一半,剩下的下次再介紹。 主要知識(shí)點(diǎn): 對(duì)象屬性的簡(jiǎn)寫(xiě) 動(dòng)態(tài) · 屬性名 Object.is(value1,...

    sarva 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

walterrwu

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<