C - 在整数变量中查找初始化数据的大小

标签 c

我需要存储在整数变量中的初始化数据的大小。

假设。

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/

相关文章:

c - C 中的数组和循环

c - luaL_setmetatable() 覆盖其他值的元表

java - 解释参数的方法

c - 如何优化 C for 循环?

c - 指针操作期间出现段错误

C - 指向数组 : how to copy just the value (not address) of one pointer to another? 的指针

c - 在创建 RAW_SOCKET 错误时,如不允许操作

c++ - 使用 __declspec(dllexport) 时出错 : Unknown type name '__declspec'

c - 搜索仅返回结构 C 中的第一个结果

C编程使用特定的主机IP连接到服务器