2017-03-04 76 views

回答

0

如果輸入被給定爲一個十進制數並且如果速度是必不可少的,然後我能想到的最快方法是:

num = 1110001010; 
vec = mod(floor(num./ 10.^(floor(log10(num)):-1:0)),2); 

的相比於method provided by Rotemnum2str相比,改進大約是4.5倍(對於更高的數字來說它更大)。下面是我用標杆代碼:

num = 1110001010; 
niter = 1e5; 

tic 
for i = 1:niter 
    vec = (num2str(num) == '1'); 
end 
t1 = toc; 

tic 
for i = 1:niter 
    vec = mod(floor(num ./ 10.^(floor(log10(num)):-1:0)),2); 
end 
t2 = toc; 

disp(t1/t2); 

當然,如果輸入的是作爲一個字符串,然後vec = (str == '1');是最有效的。

+0

num = 1110001010; vec = mod(floor(num./10。^(floor(log10(num)): - 1:0)),2); 這一個工作,直到數字長度16,我想申請它作爲14756數字的長長。 –

1

沒有標準答案,並提供了一個解決方案供您參考。

a = dec2bin(906); % a = '1110001010' 
va = a-'0';  % va = [1,1,1,0,0,0,1,0,1,0]; 
1

如果二進制數是一個字符串,可以將其轉換爲邏輯陣列:

s = '1110001010'; 
S = (s == '1'); 
相關問題