【问题标题】:C++ finding most significant bit of a binary number? [duplicate]C ++找到二进制数的最高有效位? [复制]
【发布时间】: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


【解决方案1】:

假设:仅限无符号数

要计算数字的 MSB,您需要知道有多少位表示数字的整数部分。

如果您的数字大于或等于 (2^n/2),其中 n 是数字整数部分的位数,那么您的 MSB 将为 1,否则为 0

请验证假设,有符号整数的逻辑会略有不同,定点浮点数的浮点数会更复杂

【讨论】:

  • 我假设是无符号整数。我不确定我是否跟随你。所有整数都是 32 位,因此根据整数的大小,MSB 将在 0-31 之间移动位置。 MSB 将始终为 1,它仅取决于它在整数中的位置。前导零无关紧要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2014-02-22
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多