乙個位壓縮技巧

2022-05-22 09:42:13 字數 737 閱讀 2988

判斷乙個字元c是否在乙個字串str中,你會怎麼處理?

1.for或者while迴圈判斷

可以,但是效率夠嗆

2.建立size為256的靜態對映表char tb[256],將字串str中的所有數值對映到tb中,判斷tb[c]==1就可以知道字元是否存在str中。

可以,還是可以優化的

3.用位壓縮技術對tb進行優化,由於每乙個char有8位,表可以壓縮成char tb[256/8];

首先壓縮str到tb中

dowhile(*(++str));

這段**什麼意思呢?

*str >> 3 右移三位等於*str/8

1 << (*str & 7) 求出str的後三位的值,進行bit位移以後0-7的值分別對應第1-8bit

運算完畢,tb的每乙個字元均代表8個待校驗的字元,即tb中字元的每一位都代表了ascii的乙個字元。

判斷目標的bit是否被標記過,標記過即c存在於tb中。

if(tb[c >> 3] & 1 << (c & 7))

計算的過程和壓縮的過程一樣,tb[c >> 3]計算出對應哪個字元,1 << (c & 7)求出該對應字元的哪一位,兩者位與就是壓縮後的字元標記。

通過位運算進一步優化了記憶體占用。

2和3方法各有優劣,結合場景還是很容易分辨該用哪個方法的。

--剛公升級了win10,所有的瀏覽器開啟的編輯控制項都有異常,只用ie能編輯,但格式也異常,等正常了再修改一下排版。

乙個位域問題

位域的形式 型別說明符 位網域名稱 位域長度 簡單說明下位域的規則 1.乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組。未考證 2.位域長度不超過1個位元組 3.位域可以無位網域名稱,這時它只用來作填充或調整位置。無名的位域是不能使用的。現有一段 求輸出 typedef struct bs bs...

乙個小技巧

下午去牙科看牙,順便幫我媽把鞋上個鞋絆。修鞋的老太太慈眉善目,於是跟她攀談起來。我問她,您看這鞋怎麼樣啊?老太太瞅瞅鞋,笑笑不說話。我又說,這是在沂蒙大樓專櫃買的,打折處理的 款,也不知道質量怎麼樣。老太太嗯嗯幾聲,還是不言語。一邊修著鞋,老太太看我態度還算虛心,就跟我傳授了經驗。大意就是,專櫃處理...

在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 示例 1 輸入 nums 5,7,7,8,8,10 target 8 輸出 3,4 示例 2 輸...