【发布时间】:2016-03-08 03:14:41
【问题描述】:
我已经进行了一些挖掘,但我还没有找到我的问题的解决方案。我想取一个十进制数并将其转换为位。然后我想分析这些位并确定最高位。例如,8 表示为二进制的 1000。最高有效位在 2^4 位置。我发现的最佳解决方案是做类似的事情
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 位的数字。
【问题讨论】:
-
是的,这个问题是七年前的问题。我猜在过去的 7 年里,按位算术已经成为一门失传的艺术……
-
对于任何 uintXX_t,我都准备好了一个 C++ 演示,它执行“二进制搜索”风格的工作。它分 7 步找到最重要的 uint64_t 位,分 4 步找到 uint8_t 位。返回一个 int 索引,不修改输入,4 个 ctors 让用户选择最省力的类型。如果您提出了新问题,请告诉我。我很高兴提交它..
标签: c++ binary bitset magnitude