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

时间:2018-01-25 07:27:28

标签: c

基本上试图找到汉明字符串 https://en.wikipedia.org/wiki/Hamming_distance。 我想知道这个表达是什么意思,做__construct

我知道public function __construct(RepositoryInterface $repo = null)

5 个答案:

答案 0 :(得分:5)

val已初始化为

val = x ^ y;

即。 val是x和y的逐位XOR,这意味着它在1x不同且y不同的所有位中包含0 xy相同的位。

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

val &= val - 1;

相当于

val = val & (val - 1);

每个这样的按位AND运算将1的{​​{1}}位转换为val

例如,假设0的二进制表示形式为:

val

1010 的二进制表示形式为:

val - 1

在执行按位AND后,我们得到:

1001

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

答案 1 :(得分:3)

    void findVideos(File dir, ArrayList<String> list){
        for (File file : dir.listFiles()) {
            if (file.isDirectory())
                    findVideos(file, list);
            else if(file.getAbsolutePath().contains(".mp4")) 
                   list.add(file.getAbsolutePath());
        }
    }

以下内容:

val &= val - 1 val之间的按位AND运算结果分配给val - 1

答案 2 :(得分:1)

我认为,要求的确切意图。

val &= val - 1;

这将删除最右侧,最不重要的位:

val:           xxxx1000..000
val - 1:       xxxx0111..111
val & (val-1): xxxx0000..000

它通常用于计算(破坏性地)位数。

同样的诀窍:要获得最低位,请使用Integer.lowestOneBit(val)

int lowestOneBit = val & -val;

要理解后者:-n == ~n + 1。那就是:java中的负数是二进制补码:每一位的一补(~n)加一。

答案 3 :(得分:0)

它相当于跟随一个,其中&amp;是一个按位AND。

val

答案 4 :(得分:0)

y按位AND赋值运算符,它基本上适用于复合运算符(+ =, - =等)在大多数编程语言中的工作方式。

&=val &= val - 1;

相同

一个简单的&#39;&amp;&#39;在 val val - 1 之间进行比较,结果变为val = val & (val - 1);的值。

检查this link以了解有关C中更多运算符的知识以及如何使用它们。 快乐编码!