2016-03-08 97 views
1

我已經做了一些挖掘,但我沒有找到我的問題的解決方案。我想要一個十進制數字並將其轉換爲位。然後我想分析這些位並確定最高位。例如,8以二進制表示爲1000。最重要的位是在2^4的位置。我發現的最佳解決方案是做類似C++找到二進制數的最重要的位?

int temp=8; 
bitset<32> binary; 
binary=temp; 
int pos; 

for (int i=32;i>=0;i--){ 
if (binary[i]==1) { 
pos=i; 
break; 
} 
} 

但我想知道是否有更好的解決方案呢?有沒有辦法不包括前導零,只有二進制數爲1000而不是00 .... 1000? temp中的值可以是包含32位的任何數字。

+1

是的,那個問題來自七年前。我想在過去的7年裏,逐位算術已經成爲一種失落的藝術...... –

+0

對於任何uintXX_t,我都有一個C++演示準備就緒,它執行「二分搜索」式的工作。它在7個步驟中找到最重要的uint64_t位,並以4個步驟找出uint8_t位。返回一個int索引,不修改輸入,4個參數讓用戶選擇類型最短的工作。讓我知道你是否開了一個新問題。我很高興提交它.. –

回答

0

假設:無符號數只

計算數量的MSB,你需要知道有多少位代表數量的整數部分。

如果您的數目大於或等於(2^N/2),其中n爲位的數目對數的整數部分那麼你的MSB爲1,否則這將是0

請驗證的假設,對於有符號整數邏輯將稍微不同,對於浮點浮點更爲複雜

+0

我假設無符號整數。林不知道我跟着你。所有整數都是32位,因此取決於整數的大小,MSB將從0-31移動位置。 MSB將始終爲1,這取決於它在整數中的位置。前導零並不重要。 – randy