c - 这个表达式是什么意思 "val&=val-1"

标签 c

基本上试图找到汉明字符串 https://en.wikipedia.org/wiki/Hamming_distance 。 我想知道这个表达的意思和作用val &= val - 1;

我知道val+=10-->val=val+10

最佳答案

val初始化为

val = x ^ y;

val是 x 和 y 的按位异或,这意味着它包含 1x 的所有位中和y不同和 0x 的所有位中和y是一样的。

现在,循环的每次迭代都会执行

val &= val - 1;

这相当于

val = val & (val - 1);

每个这样的按位与运算都会变成一个1一点val0 .

例如,假设 val 的二进制表示形式是:

1010

val - 1 的二进制表示是:

1001

执行按位与后,我们得到:

1000

因此,在循环结束时,dist包含数量1 val 的原始值中的位,这是x的位数和y不同。

关于c - 这个表达式是什么意思 "val&=val-1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48437660/

相关文章:

c - 如何打印 dlsym() 变量?

自定义 lwip microblaze echo 示例

c - 使用循环更改或检查输入值

C: UDP 数据包源 Ip 伪造 - 无法接收数据包

C: sscanf 赋值抑制和返回值

c - "BUTTON"是普通控件吗?

c - 指向c中许多结构的指针

C语言: change user input

c++ - 使用 extern 'C' 后有没有办法重新启用名称修改?

c - 在 Linux 中选择并接受延迟