C++ 如何有效地确定整数的汉明权重是否正好是一?

C++ 如何有效地确定整数的汉明权重是否正好是一?,c++,integer,c++03,hammingweight,C++,Integer,C++03,Hammingweight,在C++03中给定一个32位或64位整数,什么是确定是否正好有一个位集的有效方法?(例如,值正好是1, 2, 4、8, 16, 32等之一)是否有任何C++ 03库(或者如果不是C++ 11)的构建函数,可以在我碰巧遇到的任何硬件上有效地工作?我想用它来表示一条衰减消息,它在多次出现时出现的频率越来越低。如果您有一个整数x,已知它不是零,那么 if (0 == (x & (x - 1))) { there_is_only_1_bit = true; } 如果已知某个整数x不是零,则

在C++03中给定一个32位或64位整数,什么是确定是否正好有一个位集的有效方法?(例如,值正好是1, 2, 4、8, 16, 32等之一)是否有任何C++ 03库(或者如果不是C++ 11)的构建函数,可以在我碰巧遇到的任何硬件上有效地工作?我想用它来表示一条衰减消息,它在多次出现时出现的频率越来越低。

如果您有一个整数
x
,已知它不是零,那么

if (0 == (x & (x - 1)))
{
  there_is_only_1_bit = true;
}

如果已知某个整数
x
不是零,则

if (0 == (x & (x - 1)))
{
  there_is_only_1_bit = true;
}
表达式x&=(x-1)将关闭设置的x的最低位。表达式x&=(x-1)将关闭设置的x的最低位。