相关疑难解决方法(0)

在C中以整数查找最高设置位(msb)的最快/最有效方法是什么?

如果我有一个整数n,并且我想知道最高位的位置(也就是说,如果最低有效位在右边,我想知道最左边位的位置是1),找出最快捷/最有效的方法是什么?

我知道POSIX支持ffs()strings.h中的一个方法来查找第一个设置位,但似乎没有相应的fls()方法.

是否有一些非常明显的方法可以解决这个问题?

如果你不能使用POSIX功能来实现可移植性呢?

编辑:如何在32位和64位架构上运行的解决方案(许多代码清单似乎只能在32位整数上运行).

c algorithm optimization bit-manipulation

112
推荐指数
11
解决办法
11万
查看次数

如何在c/c ++中编写日志库(2)

有没有办法写log(base 2)函数?

C语言有2个内置函数 - >>

1. log基础e.

2. log10基数10;

但我需要基数2的日志功能.如何计算这个.

c c++

90
推荐指数
8
解决办法
20万
查看次数

C++如何获取变量的位长?

假设有一个变量int x.它的大小是4个字节,即32位.

然后我为这个var赋值,x = 4567(二进制10001 11010111); 所以现在,在内存中它应该是这样的:

00000000 00000000 000 10001 11010111

有没有办法得到重要的位长度.在我的例子中,比特长度将是13(我用粗体标记它们).如果我使用sizeof(x)它返回4个字节,其大小为int.如何只获得代表数字的位大小(之后没有不必要的零)?

c++ bits

4
推荐指数
2
解决办法
5601
查看次数

立即获取整数中最左边有效位的索引

如何从左到右而不是从右到左扫描整数(二进制)?我知道我可以从左边开始尝试每一位,然后记录最左边的位,但是有没有更快的方法?是否有一个内置函数可以立即找到整数中最左边的有效位(即 1)?

我知道从右到左,我可以做类似的事情

int myInt = 1234;
for(int i = 0; i < 32; i++) {
  int curr_bit = myInt & (1 << i);
  // do something with curr_bit
}
Run Code Online (Sandbox Code Playgroud)

但是,我想从最左边的可用位开始,并且我想要它的数字“x”,以便它1 << x指向该确切的数字(正如旁注,我正在尝试实现重复平方,并且我需要在我的代码)。

任何帮助将不胜感激!

c++ bit-manipulation built-in bit findfirst

0
推荐指数
1
解决办法
2435
查看次数

标签 统计

c++ ×3

bit-manipulation ×2

c ×2

algorithm ×1

bit ×1

bits ×1

built-in ×1

findfirst ×1

optimization ×1