unsigned int a=1,b=2,c=3,d=4;float f=1.0;则表达式f=(((a-b>d-c)?a++:b++),a*b)运行后,变量f为何是4,如何求的,为何不是2?望速答,谢谢
因为对于无符号整数而言a-b>d-c也就是-1>1是真的。a-b的结果比d-c大了至少一个符号位。《计算机组成原理》中讲过,因为正数的最高位也就是符号位为0,负数的符号位为1。而无符号整数的符号位也用来存数值,并且符号位是整数的最高位,因此对于无符号数而言负数是大于正数的。
unsigned int a=1,b=2,c=3,d=4;-------注意这是unsigned int,表示范围为0~2^31-1float f=1.0;f=(((a-b>d-c)?a++:b++),a*b); //a-b=-1 "溢出”了!变成了“全1”,这就大于别的数了!计算过程:f=(((1-2>4-3)?a++:b++),a*b)=((a++),a*b)=2*2=4