c - 关于获取机器字的函数的奇怪问题

标签 c

昨天用C写了一个获取机器字的函数,但是好像有问题。

这是代码:

unsigned machineword()
{
int i = 1;
unsigned temp;
while (temp > 0)
{
    i++;
    temp = (unsigned)(~0 >> i);
}
return i;
}

最佳答案

获取unsigned int宽度的最简单方法是(sizeof(unsigned)*CHAR_BIT)。

编辑:正如 pmg 所指出的,您应该了解 unsigned 在内存中占用的大小与可用于计算的位数之间的理论上的差异。您的原始代码尝试计算后者,下面的程序也是如此。上述技巧计算了内存占用的空间。

>> 计算这个数字不太方便,因为在 C 中禁止使用 >> 来计算等于或大于中大小的数字您要移动的类型的位。如果您知道 long long 严格大于 int,则可以通过使用 unsigned long long 进行计算来解决此问题:

unsigned machineword()
{
  int i = 1;
  unsigned temp=1;
  while (temp > 0)
  {
    i++;
    temp = (unsigned)(((unsigned long long)~(0U)) >> i);
  }
  return i;
}

关于c - 关于获取机器字的函数的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243758/

相关文章:

C: 哈希表上不兼容的指针类型

c - 结构到二进制

将用户输入与 C 编程语言中的预定义字符数组进行比较

c - stdio.o 在 linux 机器中的什么位置?

c++ - 什么是替代字符以及如何在Windows中处理它

c - 将超过要求的参数传递给 c 函数

c - 错误 : initializer element is not constant

c - 反转 C 中字符串中的单词顺序

c - 如何从autotools确定平台库是静态还是动态?

c - 修改字符串时出现段错误