2014-09-24 69 views
-4

初学C(系统)

include <stdio.h> 
int main() { 

int n1 = -1; 
int n2 = 2; 

unsigned int u1 = (unsigned int) n1; 
unsigned int u2 = (unsigned int) n2; 


int result = (n1 < n2) == (-n1 > -n2); 
print f("(%d < %d) == (-%d > -%d) evaluates to %d\n", n1, n2, n1, n2, result); 


/*question 1 
Is result always 1 (true)? 
*/ 

result = ~n1 + ~n2 == ~(n1 + n2); 
printf("(~%d + ~%d) == ~(%d + %d) evaluates to %d\n", n1, n2, n1, n2, result); 

return 0; 

/*question 1 
Is result always 0(false)? 
*/ 
} 

我没有得到什么概念#1试图展示,但我认为#2基本上询问是否在分发〜情况。结果总是0吗?解释

回答

0

如果通过一个负数乘以一个有效不等式的两边,则必须reverse the order of the inequality它是有效的:

(a < b)*-1 -> (-1*a > -1*b) 

因此,对于问题1,result总是或1:

int result = (n1 < n2) == (-n1 > -n2); 

如果n1小于n2,然后-n1总是比-n2更大,所以EQUA对于这种情况,人性测试是正确的。

如果n1不低于n2少,那么-n1不会比-n2更大,所以平等的测试也是如此的话。因此平等测试总是如此。