最近看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);
}