有没有办法写log(base 2)函数?
C语言有2个内置函数 - >>
1. log基础e.
2. log10基数10;
但我需要基数2的日志功能.如何计算这个.
挑战:
在两个大小相等的缓冲区上执行按位XOR.缓冲区将需要是python str类型,因为传统上它是python中数据缓冲区的类型.将结果值作为a返回str.尽快做到这一点.
输入是两个1兆字节(2**20字节)的字符串.
挑战是使用python或现有的第三方python模块(轻松的规则:或创建自己的模块)大幅击败我的低效算法.边际增加是无用的.
from os import urandom
from numpy import frombuffer,bitwise_xor,byte
def slow_xor(aa,bb):
a=frombuffer(aa,dtype=byte)
b=frombuffer(bb,dtype=byte)
c=bitwise_xor(a,b)
r=c.tostring()
return r
aa=urandom(2**20)
bb=urandom(2**20)
def test_it():
for x in xrange(1000):
slow_xor(aa,bb)
Run Code Online (Sandbox Code Playgroud) 我有一个功能:
inline uint32_t ShiftOf(uint32_t v)
{
for (uint32_t s = 0; s < 32; ++s)
{
if (v == 1 << s)
return s;
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法优化它?
作为任何非零值意味着真实的,但是>,<,==等运营商回归1真正的,我如果有任何显着的C编译器,当这些运营商可能会导致的值大于好奇1.
换句话说,是否有任何编译器int i = (a==b); 如果我打算不使用i不作为布尔值,而是作为一个整数,并假设它将是0或者1?会导致未定义的行为
嗨,谢谢你花时间回答我的问题.
我的一位朋友在接受采访时被问到以下问题:"给定一个二进制数,找到最重要的位".我立即想到了以下解决方案,但不确定它是否正确.
即,将字符串分成两部分并将两部分转换为十进制.如果左子阵列的小数为0,则在右子阵列中执行二进制搜索,查找1.
这是我的另一个问题.是最重要的位,二进制数中最左边的1?你能告诉我一个例子,当一个0是最重要的一个例子和解释时.
在下面的答案中似乎有点混乱,所以我正在更新问题以使其更精确.采访者说"你有一个网站,你收到数据,直到最重要的位表示停止传输数据"你将如何告诉程序停止数据传输"
我需要在C中计算数字的日志基数2,但我不能使用数学库.答案不需要精确,只需要最接近的int.我已经考虑过了,我知道我可以使用while循环并继续将数字除以2,直到它<2,并保持迭代次数,但这是否可以使用按位运算符?
我使用64位整数内的位存储标志.
我想知道是否有一个位设置无论64位整数内的位置(ei我不关心任何特定位的位置).
boolean isOneSingleBitSet (long integer64)
{
return ....;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用Bit Twiddling Hacks(Sean Eron Anderson)计算位数,但我想知道检测单个位是否设置的最有效方法是什么...
我发现了一些其他相关的问题:
以及一些维基百科页面:
注意:我的应用程序是在java中,但我很好奇使用其他语言的优化...
编辑:琉永福指出我的问题在我的第一个链接已经得到了答案:请参见如果一个整数是2的幂确定的位操作黑客(肖恩·安德森玉龙).我没有意识到单个位与2的幂相同.