大家好,我发给你的是我的一段代码.我想回答我的问题,这段代码已经足够,所以我没有发送所有代码.在开关的情况下,我可以看到T1,T2使用双!那是什么意思?
BinQueue Merge( BinQueue H1, BinQueue H2 ) { BinTree T1, T2, Carry = NULL; int i, j; if( H1->CurrentSize + H2->CurrentSize > Capacity ) Error( "Merge would exceed capacity" ); H1->CurrentSize += H2->CurrentSize; for( i = 0, j = 1; j <= H1->CurrentSize; i++, j *= 2 ) { T1 = H1->TheTrees[ i ]; T2 = H2->TheTrees[ i ]; switch( !!T1 + 2 * !!T2 + 4 * !!Carry )//what does mean?? { case 0: /* No trees */ case 1: /* Only H1 */ break; case 2: /* Only H2 */ H1->TheTrees[ i ] = T2; H2->TheTrees[ i ] = NULL; break; case 4: /* Only Carry */ H1->TheTrees[ i ] = Carry; Carry = NULL; break; case 3: /* H1 and H2 */ Carry = CombineTrees( T1, T2 ); H1->TheTrees[ i ] = H2->TheTrees[ i ] = NULL; break; case 5: /* H1 and Carry */ Carry = CombineTrees( T1, Carry ); H1->TheTrees[ i ] = NULL; break; case 6: /* H2 and Carry */ Carry = CombineTrees( T2, Carry ); H2->TheTrees[ i ] = NULL; break; case 7: /* All three */ H1->TheTrees[ i ] = Carry; Carry = CombineTrees( T1, T2 ); H2->TheTrees[ i ] = NULL; break; } } return H1; }
nullptr.. 5
!
意味着逻辑NOT
.!!
手段NOT NOT
.
NOT
如果操作数为零,则逻辑为1,否则为0.
!!
如果操作数非零,则为1;如果操作数为零,则为0.
这是将操作数映射为二进制(0,1)比例的便捷方式.
你可以重写!!p
为(p ? 1 : 0)
.
在您的情况下,!!p
如果p
为NULL ,则为零,1
如果p
为非NULL ,则为零.
!
意味着逻辑NOT
.!!
手段NOT NOT
.
NOT
如果操作数为零,则逻辑为1,否则为0.
!!
如果操作数非零,则为1;如果操作数为零,则为0.
这是将操作数映射为二进制(0,1)比例的便捷方式.
你可以重写!!p
为(p ? 1 : 0)
.
在您的情况下,!!p
如果p
为NULL ,则为零,1
如果p
为非NULL ,则为零.