昨天用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/