只好用C的位算符和逻辑运算符来比较两个数的大小 ,求思路!
只能用C的位算符和逻辑运算符来比较两个数的大小 ,求思路!!!!!
书上一习题。。。
只能用C的位算符和逻辑运算符来比较两个数的大小,百思不得其解!
有会的吗! 给点思路也可以!!!!
------解决方案--------------------
书上一习题。。。
只能用C的位算符和逻辑运算符来比较两个数的大小,百思不得其解!
有会的吗! 给点思路也可以!!!!
------解决方案--------------------
- C/C++ code
unsigned int a =654651, b=654541 ; unsigned int c = a ^b; unsigned int n = 0, max = 0; while ( !(c &0xf0000000) ) { c<<=4; n+=4; } while(!(c &0x80000000 ) ) { c<<=1; n++; } c>>=32-n-1; max = (a & c)? a:b;
------解决方案--------------------
- C/C++ code
int a, b, aXORb; int adiff, bdiff; aXORb = a ^ b;//进行异或运算,得出a与b的不同位,相同位即相等,不用管 adiff = a & aXORb; //得出a的不同位 bdiff = b & aXORb; //得出b的不同位 while(1) { adiff << 1; bdiff << 1; if( tempa & 0x8000 ) //此处把int当两个字节处理,TC下可以;如果int是4字节,则0x8000换成0x8000 0000 { printf("a is the larger\n"); //此时a与b的最高位必然不同!因为相同位已经在前面过滤 return; //必然有一个先与出来非0,大者即为该数。 } //如果两者与出来都是0,则再向左移动一位 else if( tempb & 0x8000 ) { printf("b is the larger\n"); return; } }