繁体   English   中英

我可以使用CHAR_BIT作为确定其他类型位数的基础吗?

[英]Can I use CHAR_BIT as the basis for determining the number of bits in other types?

例如,以下代码是否没有做出某些系统上可能不正确的假设?

 // Number of bits in an unsigned long long int:
 const int ULLONG_BIT = sizeof(unsigned long long int) * CHAR_BIT;

我同意PSkocik对原始问题的评论。 C11 6.2.6表示CHAR_BIT * sizeof (type)产生类型为type对象表示形式中的位数,但其中某些位数可能是填充位。

怀疑您对“无假设”代码的最佳选择是简单地检查ULLONG_MAX的值(或~0ULL(unsigned long long)(-1LL) ,它们都应评估为相同的值):

#include <limits.h>

static inline int ullong_bit(void)
{
    unsigned long long m = ULLONG_MAX;
    int n = 0, i = 0;
    while (m) {
        n += m & 1;
        i ++;
        m >>= 1;
    }
    if (n == i)
        return i;
    else
        return i-1;
}

如果该值的二进制模式全为1, unsigned long long可以保留的位数与该值中的二进制位数相同。

否则,最高有效位不能真正使用,因为二进制中的最大值包含零。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM