国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS的二進(jìn)制操作

MartinDai / 1769人閱讀

摘要:之前在某個項目中,遇到了許多的二進(jìn)制操作場景,因此總結(jié)下中的二進(jìn)制操作方法。有符號右移將的二進(jìn)制表示向右移位,丟棄被移出的位。用來表示原始的二進(jìn)制數(shù)據(jù)緩存區(qū),但是不可直接對進(jìn)行操作,需要借助或者類型數(shù)組對象來對緩存區(qū)的內(nèi)容進(jìn)行讀寫。

之前在某個項目中,遇到了許多JS的二進(jìn)制操作場景,因此總結(jié)下JS中的二進(jìn)制操作方法。

所謂二進(jìn)制操作,是指操作變量實際存儲的值,比如獲取字符A的Unicode值,或者將值100填入到8個字節(jié)中。

1. 位操作符

JS中的位操作與很多語言類似,具體的位運算符如下表所示。

運算符 用法 描述
按位與 a & b 對于每一個比特位,只有兩個操作數(shù)相應(yīng)的比特位都是1時,結(jié)果才為1,否則為0。
按位或 a | b 對于每一個比特位,當(dāng)兩個操作數(shù)相應(yīng)的比特位至少有一個1時,結(jié)果為1,否則為0。
按位異或 a ^ b 對于每一個比特位,當(dāng)兩個操作數(shù)相應(yīng)的比特位有且只有一個1時,結(jié)果為1,否則為0。
按位非 ~ a 反轉(zhuǎn)操作數(shù)的比特位,即0變成1,1變成0。
左移 a << b 將 a 的二進(jìn)制形式向左移 b (< 32) 比特位,右邊用0填充。
有符號右移 a >> b 將 a 的二進(jìn)制表示向右移 b (< 32) 位,丟棄被移出的位。
無符號右移 a >>> b 將 a 的二進(jìn)制表示向右移 b (< 32) 位,丟棄被移出的位,并使用 0 在左側(cè)填充。
2. 字符和Unicode編碼

在介紹具體的方法前,我們需要先了解下UCS-2和UTF-16編碼。

UCS-2是一個16bit長度的編碼集,它的表示范圍是0到0xFFFF。UTF-16的表示范圍是0到0x10FFFF,它由1個或者2個16bit的編碼單元組成。其中UCS-2是UTF-16的子集,UTF-16編碼在0到0x00FFFF的范圍稱為BMP(基本多文種平面),BMP與UCS-2的編碼完全一致。

更詳細(xì)的說明可以參考這里。

2.1 String.fromCharCode

fromCharCode 方法返回指定的UCS-2編碼對應(yīng)的字符串。它是String上的靜態(tài)方法,不可通過字符串對象直接訪問。

因為入?yún)⑹荱CS-2編碼值,所以不能多于16bit,即入?yún)⒅狄∮?5536。如果入?yún)⑿枰笥?5536,可以使用 String.fromCodePoint

String.fromCharCode(65) // A
String.fromCharCode(65, 66, 68) // ABD
2.2 String.prototype.charCodeAt

charCodeAt 返回字符串指定位置的字符的UTF-16編碼。該方法可以直接從字符串對象進(jìn)行調(diào)用。

如果該字符不能使用一個UTF-16編碼單元(16bit)來表示時,該方法只會返回第一個編碼單元。如果需要獲取完整的編碼,可以使用 String.prototype.codePointAt

"AB".charCodeAt(0) // 65
"AB".charCodeAt(1) // 66
3. ArrayBuffer

ArrayBuffer用來表示原始的二進(jìn)制數(shù)據(jù)緩存區(qū),但是不可直接對ArrayBuffer進(jìn)行操作,需要借助DataView或者類型數(shù)組對象來對緩存區(qū)的內(nèi)容進(jìn)行讀寫。

3.1 DataView

DataView 可以理解為數(shù)據(jù)視窗,通過 DataView 對象可以對 ArrayBuffer 進(jìn)行讀寫操作。

const buffer = new ArrayBuffer(4); // 申請2個字節(jié)長度的緩存區(qū)
const view1 = new DataView(buffer); // view1的范圍是整個緩存區(qū)
const view2 = new DataView(buffer, 2, 1) // view2的范圍是從第2個字節(jié)開始往后的一個字節(jié)

// 向一個16bit的內(nèi)容中填入一個帶符號的數(shù)
// 參數(shù)的含義依次為 輸入內(nèi)容的位置、輸入的值、是否使用小端方式(默認(rèn)大端)
view1.setInt16(0, 0x0A0B, false);
view1.getInt8(0); // 10,即0x0A
view1.getInt8(1); // 11,即0x0B

view2.setUint8(0, 255);
view2.getInt8(0); // 按照有符號數(shù)來讀取,結(jié)果為-1

更多的操作方法可以參考DataView。

3.2 類型數(shù)組對象

類型數(shù)組對象有很多種,比如Uint8Array, Int32Array等。將ArrayBuffer轉(zhuǎn)化為類型數(shù)組后,就可以像數(shù)組一樣來操作緩存區(qū)。

const buffer = new ArrayBuffer(8);

const arr1 = new Int16Array(buffer);
const arr2 = new Uint8Array(buffer);

arr1[0] = 256;
arr2[6] = 255;

console.log(arr1); // [256, 0, 0, 255]
console.log(arr2); // [0, 1, 0, 0, 0, 0, 255, 0]

參考文獻(xiàn)

按位操作符 - JavaScript | MDN

Unicode字符平面映射

JavaScript’s internal character encoding: UCS-2 or UTF-16?

String.fromCharCode() - JavaScript | MDN

String.prototype.charCodeAt() - JavaScript | MDN

ArrayBuffer - JavaScript | MDN

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/101714.html

相關(guān)文章

  • 按位操作

    摘要:將任一數(shù)值與執(zhí)行按位與操作,其結(jié)果都為。中應(yīng)用判斷奇偶性偶數(shù)奇數(shù)按位異或規(guī)則每一位都不同,結(jié)果才為將任一數(shù)值與進(jìn)行異或操作,其結(jié)果為。 位運算在算法中很有用,速度可以比四則運算快很多。 To2orTo10 JS中十進(jìn)制轉(zhuǎn)二進(jìn)制: (val).toString(2)JS中二進(jìn)制轉(zhuǎn)十進(jìn)制: parseInt(val, 2) JS中規(guī)定安全整數(shù)的范圍是-2^53~2^53,所以大于90071...

    caiyongji 評論0 收藏0
  • Node.js緩沖區(qū)(Buffer)究竟是什么?

    摘要:在創(chuàng)建時大小已經(jīng)被確定且是無法調(diào)整的,在內(nèi)存分配這塊是由層面提供而不是具體后面會講解。在這里不知道你是否認(rèn)為這是很簡單的但是上面提到的一些關(guān)鍵詞二進(jìn)制流緩沖區(qū),這些又都是什么呢下面嘗試做一些簡單的介紹。 showImg(https://segmentfault.com/img/remote/1460000019894717?w=1280&h=850); 多數(shù)人都擁有自己不了解的能力和機...

    scwang90 評論0 收藏0
  • 由left-pad扯到JS位運算

    摘要:原碼補碼和反碼原碼一個數(shù)在計算機中是以二進(jìn)制的形式存在的,其中第一位存放符號正數(shù)為負(fù)數(shù)為。中的位運算在中按位操作符會將其操作數(shù)轉(zhuǎn)成補碼形式的有符號位整數(shù)。原文鏈接由扯到中的位運算 這個話題的由來是2016年3月份的時候 NPM 社區(qū)發(fā)生了‘left-pad’事件,不久后社區(qū)就有人發(fā)布了用來補救的,也是現(xiàn)在大家能用到的 left-pad 庫。 最開始這個庫的代碼是這樣的。 module....

    LeoHsiun 評論0 收藏0
  • 對類型化數(shù)組(Typed Array)與ArrayBuffer理解

    摘要:類型化數(shù)組也是中新引入的。用一句話解釋類型化數(shù)組就是它是操作二進(jìn)制數(shù)據(jù)的接口。類型化數(shù)組類型化數(shù)組的應(yīng)用二進(jìn)制數(shù)據(jù)的接口主要應(yīng)用于文件,在中涉及文件處理的幾乎都可以應(yīng)用,主要是,,。 類型化數(shù)組(Typed Array)也是HTML5中新引入的API。用一句話解釋類型化數(shù)組就是:它是JS操作二進(jìn)制數(shù)據(jù)的接口。 眾所周知,直接操作二進(jìn)制數(shù)據(jù)可以使程序更為高效, 盡管JS對常規(guī)數(shù)組做了很多...

    Worktile 評論0 收藏0
  • JS】關(guān)于JS一些知識點(JS基礎(chǔ),純記錄)

    摘要:如何讓根據(jù)拆箱轉(zhuǎn)換,以及的隱式轉(zhuǎn)換,可以如下寫為什么計算機中所有的數(shù)據(jù)都是以二進(jìn)制存儲的,所以在計算機計算時要把數(shù)據(jù)先轉(zhuǎn)換成二進(jìn)制進(jìn)行計算,然后把計算結(jié)果轉(zhuǎn)換成十進(jìn)制。會存在精度丟失問題和的二進(jìn)制都是以無線循環(huán)的小數(shù)的二進(jìn)制的二進(jìn)制 本想著記筆記里,但是筆記里沒有分類,還是以文章的形式,當(dāng)個人總結(jié)吧,這一篇就當(dāng)作JS基礎(chǔ)篇的記錄吧,有修改的和新增的持續(xù)更新~ 關(guān)于JS的一些小技巧 1:...

    SwordFly 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<