【技巧】k != -1 可以简写成 ~k
k != -1 可以简写成 ~k
~表示按位取反,顾名思义,取反运算就是将1变0,0变1。
当k=-1时,将其转换为二进制表达可得到 11111111 11111111 11111111 11111111
- (负数在二进制时借助补码来表达,关于补码,可详见于“其他”,一般就是把负数所对应的正数的二进制状态下的最高位修改为1,然后最高位按兵不动,其余取反,得到反码,然后加上1)
~k将得到0
-
应用:
在前向星的运用中,一般将第一条边的位置赋值为-1
(memset(h,-1,sizeof(h)))
for(int i=h[i];~i;i=ne[i]) { 操作; }