可能重复:
在不使用if-else或任何其他比较运算符的情况下查找最多两个数字
更伟大:
if x > y then return 1, else return 0
例:
合法经营者: ! ~ & ^ | + <>
! ~ & ^ | + <>
isGreater是function..
我试过了:
int isGreater(int x, int y) { return (y+(~x+1)) >> 31 & 1; }
但不工作.. :((让我知道我还能做些什么?
给定x,y
尝试x + -y如果<0则y更大,如果> 0则x更大。
-y = y的二进制补码:
-y = (~(y-1)) <==> -y = (~y)+1
从我看到的,你用(~y +1))做二进制补码,这是相同的。
然后bitshift >> 31得到MSB,等于1。
确保设置parantheses,运算符优先级!
(y+-x) >> (31 & 1); != ((y+-x) >> 31) & 1;
太容易了 – 因为你在合法操作符列表中有+
,你可以简单地合成-
(正如其他人注意到的那样)然后做一个减法并提取符号。 如果你省略+
(因为它不是一个按位运算符)并且只用按位运算( &
|
^
~
)和移位来回答问题就会更有趣。
当然,你可以从按位运算和移位中合成+
/ -
但实际上有一种更简单的方法。
以上就是c/c++开发分享使用按位运算符在C中最多两个数字相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/559626.html