c - 在 C 中使用按位运算符查找 x 是否大于 y

标签 c bit-manipulation

<分区>

如果 x > y,则此函数将返回 1,否则返回 0。

到目前为止我有

int isitGreater(int x, int y) {

     return (((y+((~x)+1)) >> 31) & 1);

但它不起作用。

允许的操作:合法操作:! ~ & ^ | + << >>

我确信我的逻辑是正确的,如果 X - Y 并且我得到一个负数,这意味着 y > x ,因此第 32 位是 1,所以我将那个位向右移动 31 次并且然后用“1”“和”它。

编辑:如果 x 为负数,由于溢出,这将不起作用。如何在不使用条件语句的情况下解决这个溢出问题?

最佳答案

您的代码对我来说工作正常。请提交有效问题。

编辑:如果 x 为 -2147483648,您的算法将无法正常工作,因为 -(-2147483648)(或等效地,~(-2147483648)+1)溢出。

关于c - 在 C 中使用按位运算符查找 x 是否大于 y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12524038/

相关文章:

c - 在 C 中使用指针数组方法为 3D 数组动态分配内存

c - 读取文件并将其存储在结构中,以便可以在其他函数中使用

c - xml解析错误属性名重新定义

c - 使用 glib 通过 USB 将原始字节发送到 FTDI 设备

c++ - 从循环位集中切出一个子串

c - Linux 内核 - 如何停止等待信号量的 kthread?

c++ - 在没有转换的情况下使用十六进制值时的未定义行为

c++ - 压缩一个十六进制数

c - 与 long 复制的位不同的两个 double 打印不同

将两个无符号字符连接为一个 uint16_t