如果我有一个整数n,并且我想知道最高位的位置(也就是说,如果最低有效位在右边,我想知道最左边位的位置是1),找出最快捷/最有效的方法是什么?
我知道POSIX支持ffs()
strings.h中的一个方法来查找第一个设置位,但似乎没有相应的fls()
方法.
是否有一些非常明显的方法可以解决这个问题?
如果你不能使用POSIX功能来实现可移植性呢?
编辑:如何在32位和64位架构上运行的解决方案(许多代码清单似乎只能在32位整数上运行).
有没有办法写log(base 2)函数?
C语言有2个内置函数 - >>
1. log
基础e.
2. log10
基数10;
但我需要基数2的日志功能.如何计算这个.
假设有一个变量int x.它的大小是4个字节,即32位.
然后我为这个var赋值,x = 4567(二进制10001 11010111); 所以现在,在内存中它应该是这样的:
00000000 00000000 000 10001 11010111
有没有办法得到重要的位长度.在我的例子中,比特长度将是13(我用粗体标记它们).如果我使用sizeof(x)它返回4个字节,其大小为int.如何只获得代表数字的位大小(之后没有不必要的零)?
如何从左到右而不是从右到左扫描整数(二进制)?我知道我可以从左边开始尝试每一位,然后记录最左边的位,但是有没有更快的方法?是否有一个内置函数可以立即找到整数中最左边的有效位(即 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
指向该确切的数字(正如旁注,我正在尝试实现重复平方,并且我需要在我的代码)。
任何帮助将不胜感激!