最近发现了一个挺有意思的题:
usigned int a = 8;
int b = -7;
if( a + b <= 5 )
printf( "X" );
usigned int c = 8;
int d = -10;
if( c + d <= 5 )
printf( "Y" );
正确结果是 X。
问题就出在加法的底层实现上。
在位运算中,加法是通过 XOR(异或)和 AND(与)两个运算来实现的。
XOR是结果。AND是进位。
最近发现了一个挺有意思的题:
usigned int a = 8;
int b = -7;
if( a + b <= 5 )
printf( "X" );
usigned int c = 8;
int d = -10;
if( c + d <= 5 )
printf( "Y" );
正确结果是 X。
问题就出在加法的底层实现上。
在位运算中,加法是通过 XOR(异或)和 AND(与)两个运算来实现的。
XOR是结果。AND是进位。