提问人:mkluwe 提问时间:2/12/2010 最后编辑:mkluwe 更新时间:6/12/2021 访问量:14864
获取 char 中的位数
Get number of bits in char
问:
如何获取类型的位数?char
我从中知道。这被描述为 »该宏为用于表示 char 类型的对象的位数生成最大值。我理解这意味着 a 中的位数,不是吗?CHAR_BIT
climits
char
我能以某种方式得到相同的结果吗? 正确返回,但不幸的是,因为此值尊重此处 8 位字符的有符号性......std::numeric_limits
std::numeric_limits<char>::digits
7
答:
如果你想过于具体,你可以这样做:
sizeof(char) * CHAR_BIT
如果你知道你肯定会做 sizeof char,这有点矫枉过正,因为 sizeof(char) 保证为 1。
但是,如果您转向其他类型,例如wchar_t,那将很重要。
一种非高效的方法:
char c;
int bits;
for ( c = 1, bits = 0; c; c <<= 1, bits++ )
;
printf( "bits = %d\n", bits );
CHAR_BIT
根据定义,是 类型的对象表示中的位数。[signed/unsigned] char
numeric_limits<>::d igits
是给定类型的值表示形式的无符号位数。
你需要哪一个?
如果你在对象表示中寻找位数,那么正确的方法是取 的类型并将其乘以(当然,在类型的特定情况下乘以是没有意义的,因为它们的大小始终为 1,并且根据定义,alredy 包含您需要的内容)。sizeof
CHAR_BIT
sizeof
char
CHAR_BIT
如果你在谈论价值表示,那么就是要走的路。numeric_limits<>
对于类型,对象表示的 bit-size () 保证与值表示的 bit-size 相同,因此您可以互换使用,但从概念的角度来看,这可能是值得怀疑的。unsigned char
CHAR_BIT
numeric_limits<unsigned char>::digits
CHAR_BIT
评论
在这里查看此代码的片段存档,这是一个改编版本,我不声明此代码:
int countbits(char ch){ int n = 0; if (ch){ do n++; while (0 != (ch = ch&(ch-1))); } return n; }
希望这会有所帮助, 此致敬意 汤姆。
这里还没有声誉,所以我不被允许回复@t0mm13b的答案,但想指出代码有问题:
int countbits(char ch){
int n = 0;
if (ch){
do n++;
while (0 != (ch = ch&(ch-1)));
}
return n;
}
上面不会计算字符中的位数,而是会计算设置位数(1 位)。
例如,以下调用将返回 4:
char c = 'U';
countbits(c);
代码:
ch = ch & (ch - 1)
是剥离设置为 1 的右侧最(最低有效)位的技巧。因此,它会掩盖任何设置为 0 的位,并且不计算它们。
评论