问题描述
我将如何回报最大的,如只使用位运算三个无符号整数,〜,|,&安培;!,^ +,>>,<&LT ;.我不知道从哪里开始。任何帮助将是AP preciated。
编辑:
我只允许使用指定的法律OPS,完蛋了。
/ ** maxOfThree - 返回最大的三个整数。
*注:X,Y,Z都在范围[0,TMAX。
*实施例:maxOfThree(1,2,3)= 3
*法律OPS! 〜&安培; ^ | + LT;< >>
*最大OPS:25
INT maxOfThree(INT X,INT Y,INT Z){
}
看一看了的的页面和学习/如何最大最小的贯彻落实。
如果你能弄清楚如何为两个数字作品的最大值,那么你就可以概括的情况下三个数字。
让我给你解释一下这两个号码的情况下获取最大的价值:
- (A< B)
可以返回-1或0,那么你可以有 11111111 11111111 11111111 11111111
(-1补为一个int)或 00000000 00000000 00000000 00000000
(-0 == 0为一个int)。
记住, A ^ B ^ B = A
和 A ^ B ^ A = B
(没有按' ŧ重要的顺序是什么,这是),你有在第一种情况:
- 如果
A< b
你需要返回b的结果,所以
A ^((A ^ B)及 - (A< B))
必须等于 A ^ A ^ B
..事实上它是自 - (A< b)
收益 11111111 11111111 11111111 11111111
,和一个和按位&放大器;在 11111111 11111111 11111111 11111111
一个无符号整数叶数不变......从而 A ^ A ^ B =
。这是最大
- 如果
A> b
然后A< b
是假的,从而(任何与放大器; 00000000 00000000 00000000 00000000)
0。就这样,你有A ^ 0
,这是一个。最大的。
最后,我们有解决方案概括为三个数字:
的#include<&stdio.h中GT;INT GetMax的(unsigned int类型一,无符号整型B,无符号整型C){
INT TEMP = A ^((A ^二)及; - (A< B));
INT R = C ^((C ^温度)及 - (℃下温));
返回ř;
}诠释主要(无效){
unsigned int类型A = 3,B = 1,C = 9; 的printf(%d个,GetMax的(A,B,C));
返回0;
}
编辑:如果你不能使用<然后使用第二个版本。
X - ((X - Y)及((X - Y)>>(的sizeof(int)的* CHAR_BIT - 1)));
和牢记以下摘录
Edit II: this should work with the specification you posted:
#include <stdio.h>
int getMax(int x, int y, int z) {
int r = (x + ~((x+~y+1) & ((x+~y+1) >> 31))+1); // if possible use sizeof(int)*sizeof(char)+~0 instead of 31
int r2 = (z + ~((z+~r+1) & ((z+~r+1) >> 31))+1); // if possible use sizeof(int)*sizeof(char)+~0 instead of 31
return r2;
}
int main(void) {
unsigned int a = 5, b = 7, c = 1;
printf("%d", getMax(a,b,c));
return 0;
}
Notice that it would be better if you could use sizeof() instead of just assuming that an int is 4 bytes (it isn't true on all platforms).
这篇关于使用位运算三个整数最大?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!