本文介绍了使用位运算三个整数最大?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将如何回报最大的,如只使用位运算三个无符号整数,〜,|,&安培;!,^ +,>>,<&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)&​​GT;>(的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).

这篇关于使用位运算三个整数最大?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-15 01:28