我们在一个int类型值为32位的机器上运行程序。这些值以补码形式表示,而且它们都是算术右移的。unsigned类型的值也是32位的。
我们产生随机数x和y,并且把它们转换成无符号数,显示如下:
/* Create some arbitrary values*/ int x = random(); int y= random(); /* Convert to unsigned*/ unsigned ux =(unsigned) x; unsigned uy = (unsigned.) y;
对于下列每个C表达式,你要指出表达式是否总是为1。如果它总是为1,那么请描述其中的 数学原理。否则,列举出一个使它为0的参数示例。
A. (x<y)= =(-x>-y)
B. ((x+y)<<4) +y-x==17*y+15*x
C. ~x+~y+l==~(x+y)
D. (ux-uy) = = - (unsigned) (y-x)
E. ((x>>2)<<2)<=x