Try*_*yeR 0 c pointers operators
大家好,我发给你的是我的一段代码.我想回答我的问题,这段代码已经足够,所以我没有发送所有代码.在开关的情况下,我可以看到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;
}
Run Code Online (Sandbox Code Playgroud)
!意味着逻辑NOT.!!手段NOT NOT.
NOT如果操作数为零,则逻辑为1,否则为0.
!!如果操作数非零,则为1;如果操作数为零,则为0.
这是将操作数映射为二进制(0,1)比例的便捷方式.
你可以重写!!p为(p ? 1 : 0).
在您的情况下,!!p如果p为NULL ,则为零,1如果p为非NULL ,则为零.