使用位运算符在C中最多两个数字

使用位运算符在C中最多两个数字,c,C,可能重复: 更大: if x > y then return 1, else return 0 例如: Is大于(4,5)=0 Is大于(5,4)=1 合法运营商:!~&^|+> 这个函数更大 我试过: int isGreater(int x, int y) { return (y+(~x+1)) >> 31 & 1; } 但不起作用(( 让我知道我还能做什么?给定x,y 试试x+-y 如果小于0,则y更大;如果大于0,则x更大 -y=y的二进制补

可能重复:

更大:

if x > y  then return 1, else return 0 
例如:

  • Is大于(4,5)=0
  • Is大于(5,4)=1
合法运营商:
!~&^|+>

这个函数更大

我试过:

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
给定x,y

试试x+-y 如果小于0,则y更大;如果大于0,则x更大

-y=y的二进制补码:

-y = (~(y-1))
<==>
-y = (~y)+1
太简单了——因为在合法运算符列表中有
+
,所以您可以简单地合成
-
(正如其他人所注意到的),然后进行减法和提取符号。如果您省略
+
(因为它无论如何都不是位运算符),只使用位运算符回答问题,这会更有趣(
&
|
^
~
)和移位

当然,您可以通过按位运算和移位合成
+
/
-
,但实际上有一种更简单的方法。

太容易了——因为您在合法运算符列表中有
+
,您可以轻松地合成
-
(其他人已经注意到)如果你省去了
+
(因为它不是一个按位运算符)而只使用按位运算(
&
|
^
~
)和移位来回答问题,那就更有趣了


当然,您可以从按位运算和移位合成
+
/
-
,但实际上有一种更简单的方法。

没完没了的“如何使用有限的C运算符子集执行X?”是怎么回事?键入问题?步骤1。请使用
{
按钮。第2步。请用[家庭作业]标签标记你的家庭作业。@Oli,显然这是一项常见的家庭作业。标题上写着“最多两个数字”然而,问题本身表明,你只想测试
x>y
——到底是哪一个???这是一个合理的数学类作业,而不是编程类作业。无穷无尽的“我如何用有限的C运算符子集做x?”是怎么回事键入问题?第1步。请使用
{}
按钮格式化您的代码。第2步。请用[家庭作业]标记标记您的家庭作业。@Oli,显然这是一项常见的家庭作业。标题上写着“最多两个数字”而问题本身表明你只想测试
x>y
-到底是哪一个???这是数学课的合理作业,而不是编程课。@Paul显然你没有读他的answer@Paul显然你没有读过他的回答限制确实让它更有趣,尽管我不能在围棋中+1od良心,因为你真的在问一个单独的问题。我心目中的解决方案需要5次右转,我怀疑这是最小可能的数字。这种限制确实让它更有趣,尽管我不能在良心上+1,因为你真的在问一个单独的问题。我心目中的解决方案需要5次右转,这我想这是可能的最小数目。