以char
字节为单位的整数类型(或任何类型)的大小很容易计算为sizeof(type)
.一个常见的习惯用法是乘以CHAR_BIT
找到该类型占用的位数,但是在使用填充位的实现中,这将不等于值位的宽度.更糟糕的是,代码如下:
x>>CHAR_BIT*sizeof(type)-1
Run Code Online (Sandbox Code Playgroud)
如果CHAR_BIT*sizeof(type)
大于实际宽度,实际上可能有未定义的行为type
.
为简单起见,我们假设我们的类型是无符号的.那么宽度type
是ceil(log2((type)-1)
.有没有办法将此值计算为常量表达式?