我需要存储在整数变量中的初始化数据的大小。
假设。
u32 var = 0x0; should return 0
u32 var = 0x12; should return 1
u32 var = 0x1234; should return 2
u32 var = 0x123456; should return 3
u32 var = 0x12345678; should return 4
最佳答案
log2(x) 将为您提供二进制值的指数。一些 C 实现已经内置了这个函数。如果没有,这里有一些替代方案:How to write log base(2) in c/c++
可以对生成的指数进行除法和四舍五入,以获得您需要的值。
第一次尝试(未经测试)是:
int byteCount(const int x)
{
if (x == 0) return 0; /* Avoid error */
return (int)trunc((log10(x)/log10(2))/8+1);
}
更新: 看来我的代码是按字面意思理解的。这是一个优化版本:
int byteCount(const u32 x)
{
if (x == 0) return 0; /* Avoid error */
return (int)trunc((log10(x)/0.301029995663981)/8+1);
}
关于C - 在整数变量中查找初始化数据的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38817037/