C++ 如何解释函数计数位数是奇数还是偶数

C++ 如何解释函数计数位数是奇数还是偶数,c++,c,bit-manipulation,C++,C,Bit Manipulation,找到“计算机系统”上的函数: 如果x包含奇数“1”,则返回1;如果x包含偶数“1”,则返回0。 我知道“val&0x1”check val是奇数或偶数,但我不知道它如何计算val上的位数。它不准确地计算位数,但XOR将为x中的每个位翻转val中的低位。如果它被翻转奇数次,这将使它成为1 它还翻转了val中的许多其他位,但这与此无关,因为它们在返回语句中被屏蔽了。它不精确地计算位,但异或将为x中的每个位翻转val中的低位一次。如果它被翻转奇数次,这将使它成为1 它还翻转了val中的许多其他位,但这

找到“计算机系统”上的函数:

如果x包含奇数“1”,则返回1;如果x包含偶数“1”,则返回0。
我知道“val&0x1”check val是奇数或偶数,但我不知道它如何计算val上的位数。

它不准确地计算位数,但XOR将为
x
中的每个位翻转
val中的低位。如果它被翻转奇数次,这将使它成为
1


它还翻转了
val
中的许多其他位,但这与此无关,因为它们在返回语句中被屏蔽了。

它不精确地计算位,但异或将为
x
中的每个位翻转
val
中的低位一次。如果它被翻转奇数次,这将使它成为
1


它还翻转了
val
中的许多其他位,但这与此无关,因为它们在return语句中被屏蔽了。

在进行位旋转时,您通常希望考虑的不是数字,而是位数组<代码>^
在每个位执行加法mod 2。既然只有
val
的低位才重要,那么它发生了什么


val
实际上应该是未签名的,尽管大多数计算机架构不会给您带来问题。实际上,在使用这样的函数的情况下,应该使用固定宽度的整数类型,比如
uint32\t

在进行位旋转时,通常不要考虑数字,而要考虑位数组<代码>^在每个位执行加法mod 2。既然只有
val
的低位才重要,那么它发生了什么


val
实际上应该是未签名的,尽管大多数计算机架构不会给您带来问题。实际上,在使用此类函数的情况下,应该使用固定宽度的整数类型,如
uint32\t

使用纸笔法。尝试使用一些数字。为了清楚起见,这实际上不应该是
int val
,而应该是
unsigned val
。使用纸笔方法。尝试使用一些数字。为了清楚起见,这实际上不应该是
int val
,而应该是
unsigned val
int fun_a(unsigned x){
    int val = 0;
    while(x){
        val ^= x;
        x >>= 1;
    }
    return val & 0x1;
}