天天看点

“~i“在C语言的for循环中是什么意思

最近看y总的视频,在他的代码里经常出现~1,比如:

for (int i = h[u]; ~i; i=ne[i]) {
        dfs(e[i],depth+1);
    }
           

然后我就不解了,去百度了一通。百度说"~"在C语言里面是二进制取反的意思。

我还是有点不解,然后自己写代码测试了一下,得到以下结果:

~-1 = 0
~0 = -1
~1 = -2
~2 = -3
~15 = -16
           

有点补码内味了,对于十进制的数来说就是先价格负号,然后-1呗。那么上面那个for里面的~i就等价于i != -1了与下面的代码完全等价。

for (int i = h[u]; i != -1; i=ne[i]) {
        dfs(e[i],depth+1);
    }
           

继续阅读