摘要:二進制狀態碼存儲的主要好處是節省存儲空間,相對于鍵值對對象存儲而言可讀性較差當然文件權限這種另說。所以注意如果后端返回二進制狀態碼讓前端判斷,確保后端使用存儲完
我們知道計算機中數據都是用二進制數存儲。二進制數是一系列0和1的組合,長整型64位,最短的字節型也有8位。其中每一位0和1都可以看做一種狀態的開和關,所以就有了這樣的一種狀態碼存儲方式:把同一對象的多種狀態按位組合到一個整數中。
例如我們最最常見的 *nix 文件權限:
第9位 | 第8位 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 第1位 | 第0位 |
---|---|---|---|---|---|---|---|---|---|
是否目錄 | 所有者讀權限 | 所有者寫權限 | 所有者執行權限 | 組讀權限 | 組寫權限 | 組執行權限 | 其余用戶讀權限 | 其余用戶寫權限 | 其余用戶執行權限 |
0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
那么這一組狀態在程序中表示為:0b0111101101,即八進制的 0o755,十進制的 493。
二進制狀態碼存儲的主要好處是節省存儲空間,相對于鍵值對(對象)存儲而言可讀性較差(當然文件權限這種另說)。這種存儲方式僅適用于“一個對象有多種狀態,每種狀態僅有兩種情況”這一情形,請不要對一種狀態多種情況的情形使用二進制狀態碼存儲方式,更不要出現十進制的 0 1 10 這種狀態碼,很蠢。。。
使用位運算操作狀態碼基于這種存儲方式,也衍生了一些操作狀態碼的方式:
判斷第 x 位狀態是否開啟(x 以 0 開始,下同):status & (1 << x) == 0 // bt ( bit test )打開第 x 位
status |= 1 << x // bts ( bit test and set )重置第 x 位
status &= ~(1 << x) // btr ( bit test and reset )取反第 x 位
status ^= 1 << x // btc ( bit test and complement )編程語言支持
某些編程語言提供了對二進制狀態碼的一些原生支持。C/C++ 提供了 位域,以及專門的模板庫 bitset 用于簡化位運算操作。C# 則提供了 Flags 特性標記某個枚舉被視作位域
另外很重要一點,JavaScript 雖然也支持位運算,但由于 JavaScript 中的 number 類型都是雙精度浮點數,在做位運算時會先將數值截斷至 32 位長度。例如很著名的數字轉整數bug:10000000000 | 0 => 1410065408。所以注意如果后端返回二進制狀態碼讓前端判斷,確保后端使用 uint32_t 存儲
完文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101500.html
摘要:狀態碼當關閉一個連接時如在開始握手已經完成后,發送一個關閉幀,終端可能會說明關閉的原因。表示終端由于協議錯誤中止了連接。這個狀態碼是為了給上層應用表示連接被異常關閉如沒有發送或者接受一個關閉幀這種場景的使用而設計的。 概述 本文為 WebSocket 協議的第七章,本文翻譯的主要內容為 WebSocket 連接關閉相關內容。 關閉連接(協議正文) 7.1 定義 7.1.1 關閉 Web...
摘要:現在解釋和正則匹配中的轉義字符之間的關系其實中的轉義字符和正則中的轉義字符是同一樣東西,都是特殊意義的字符,也算對中一些特殊字符或不能顯示的字符的定義或別稱。 1、正則表達式的組合 正則表達式由元字符和轉義字符組成 元字符有 ^ :斷言目標的開始位置(或多行模式下的行首位置) $ :斷言目標的介紹位置(或多行模式下的結尾位置) . :匹配除換行符外的其他任何字符 [ :匹配字...
摘要:狀態碼有哪些一般大家都知道頁面不存在,服務器錯誤,重定向,臨時重定向,,未授權啥的。總結僅僅三個狀態碼,都可以牽涉到如此豐富的知識,對于狀態碼,我們不能只是片面的去背誦狀態碼及對應的含義,要去主動挖掘,深入,借助狀態碼來建立自己的網絡體系。 之前寫的一些筆記,簡單記錄在這里。 http狀態碼有哪些? 一般大家都知道404頁面不存在,500服務器錯誤,301重定向,302臨時重定向,2...
摘要:背景狀態碼有哪些,這也是一個很高頻的面試問題。總結僅僅三個狀態碼,都可以牽涉到如此豐富的知識,對于狀態碼,我們不能只是片面的去背誦狀態碼及對應的含義,要去主動挖掘,深入,借助狀態碼來建立自己的網絡體系。 背景 http狀態碼有哪些,這也是一個很高頻的面試問題。一般大家都知道404頁面不存在,500服務器錯誤,301重定向,302臨時重定向,200ok,401未授權啥的。 如果只是簡單的...
摘要:數據幀協議正文概覽在協議中,數據是通過一系列數據幀來進行傳輸的。注意無論協議是否使用了,幀都需要添加掩碼。服務端收到沒有添加掩碼的數據幀以后,必須立即關閉連接。服務端禁止在發送數據幀給客戶端時添加掩碼。 概述 本文為WebSocket協議的第五章,本文翻譯的主要內容為WebSocket傳輸的數據相關內容。 數據幀(協議正文) 5.1 概覽 在WebSocket協議中,數據是通過一系列數...
閱讀 2417·2021-08-18 10:21
閱讀 2526·2019-08-30 13:45
閱讀 2158·2019-08-30 13:16
閱讀 2117·2019-08-30 12:52
閱讀 1366·2019-08-30 11:20
閱讀 2628·2019-08-29 13:47
閱讀 1626·2019-08-29 11:22
閱讀 2763·2019-08-26 12:11