我正在為整數型別的陣列實作基數排序。使用numeric_limits標準庫提供的函式,我能夠使用 了解任何給定整數型別的本機基表示numeric_limits::radix,以及該型別可以使用的基中的最大位數numeric_limits::digits。為了最佳地實作基數排序,我需要為陣列的每個元素依次提取每個數字的值。是否有一些標準或至少常見的方法來做到這一點?萬一這很重要,我使用的是 C 20,并不關心與舊版本標準的向后兼容性,只關心與其他 C 20 代碼的最大互操作性。
uj5u.com熱心網友回復:
如果您想遍歷number用radix基數表示的數字的數字,按照從最小到最大有效數字的順序,那么像下面這樣的回圈將起作用。此回圈假定這number是一種支持除法和取模的型別,并且這些操作是純整數操作(小數被洗掉):
auto curr_val = number; //Copy the number, since we're going to modify it.
while(curr_val != 0)
{
auto curr_digit = curr_val % radix;
curr_val = curr_val / radix; //Integer division.
}
請注意,無論number型別使用的任何內部表示形式如何,這都有效。因此,即使是 2,這也適用于以 base-10 表示numeric_limits<int>::radix的方式進行迭代。number
uj5u.com熱心網友回復:
如果您只使用使用基數 2 的整數型別,您可以使用它bitset來提取每個數字:
auto i = 384762132;
std::bitset<std::numeric_limits<decltype(i)>::digits> b(i);
std::cout << b; // 0010110111011110000000100010100
std::cout << b[4]; // 1(prints 4th 0-indexed lsb)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/451620.html
上一篇:顯示星號代替數字
