我有一個32位的數字(uint32),它包含四個數字,其方式如下:
我有一個32位的數字(uint32),它包含四個數字。
- 變數1在32:31位
- 變數2在第30:22位 。
- 變數3在第21:13位 。
- Var4在第12:1位 。
下面的代碼可以作業,但我想讓它更快
Var1=bitshift(fourbytes,30)。
Var2_temp=bitshift(fourbytes,21)。
Var2=bitand(Var2_temp,511)。
Var3_temp=bitshift(fourbytes,12)。
Var3=bitand(Var2_temp,511)。
Var4=bitand(fourbytes,2^12-1))。)
例子:
fourbytes = 2149007896;
結果在
Var1=2;
Var2=0;
Var3=372; Var2=0; Var3=372
Var4=536; Var4=536.
我已經嘗試過類似的方法
Var1=bin2dec(num2str(bitget(fourbytes,32:-1:31) )。
但是,這和bi2de一樣,慢得令人難以置信
。bi2de(bitget(onebyte(1),32: -1:31),'left-msb')。)
我唯一的選擇是用C語言寫這部分內容,還是有更好的方法,我錯過了?
uj5u.com熱心網友回復:
這可以用
來完成我沒有計時,但是它可能比你現在的方法更快。
fourbytes = 2149007896。
var1 = floor(fourbytes/2^30)。
var2 = mod(floor(fourbytes/2^21) 。2^9)。)
var3 = mod(floor(fourbytes/2^12) 。2^9)。)
var4 = mod(fourbytes, 2^12) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/309714.html
標籤:
