应用于位域时,Sizeof()不起作用:
# cat p.c
#include<stdio.h>
int main( int argc, char **argv )
{
struct { unsigned int bitfield : 3; } s;
fprintf( stdout, "size=%d\n", sizeof(s.bitfield) );
}
# gcc p.c -o p
p.c: In function ‘main’:
p.c:5: error: ‘sizeof’ applied to a bit-field
Run Code Online (Sandbox Code Playgroud)
......显然,因为它无法返回浮点部分大小或其他东西.然而,它提出了一个有趣的问题.在C中是否有一个等价物来告诉你变量/类型中的位数?理想情况下,除了位域之外,它也适用于常规类型,如char和int.
更新:
如果对于位域没有相当于sizeof()的语言,那么计算它的最有效方法是什么 - 在运行时!想象一下,你有依赖于此的循环,如果改变位域的大小,你不希望它们破坏 - 并且没有公平的作弊,并使位域大小和循环长度成为宏.;-)
在c ++ 11中,constexpr表达式不能包含重新解释转换.因此,例如,如果想要操纵浮点数中的位,比如找到数字的尾数:
constexpr unsigned int mantissa(float x) {
return ((*(unsigned int*)&x << 9) >> 9);
};
Run Code Online (Sandbox Code Playgroud)
上面的代码将无法实现constexpr.从理论上讲,我无法看到在这个或类似情况下重新解释如何与算术运算符有任何不同,但编译器(和标准)不允许它.
是否有任何巧妙的方法来解决这个限制?