【发布时间】:2021-12-16 04:56:24
【问题描述】:
这是一个家庭作业,需要我想出一个函数来确定是否x < y,如果是,我必须返回1,只使用位运算符( ! ~ & ^ | + << >> )。我只被允许使用常量0 - 0xFF,并假设一个 32 位整数。没有循环、强制转换等。
我发现如果你只检查 4 位,你可以用x - y 来确定@987654327@ 是否小于y。如果x 是8 并且y 是9,那么-1 的结果将是1111。
int lessThan(int x, int y){
int sub = x + (~y+1);
我感到困惑的是现在如何将该结果与x 进行比较,以确定它确实小于y。
我一直在研究这篇文章here。
但我对这种解决问题的方法有点困惑。我已经计算出了实现位拖尾的转变,但我对如何使用该结果来比较小于或大于的值感到困惑。我只是在寻找一些指导和清晰,而不是解决方案,这不是我的意图。
【问题讨论】:
-
!和+什么时候变成了位运算符?你确定它们是合法的吗? -
是的,我确信它们是合法的,我想我应该说我只被允许使用这些算术和逻辑运算符。对不起。
-
允许整数和无符号数。
-
我对这个家庭作业和这门课都很熟悉。与其给您答案,不如尝试以下方法:考虑 x 和 y 的符号,然后将比较分为四种情况。您可以从那里简化解决方案。
-
谢谢,我想这就是我正在努力解决的问题。
标签: c bitwise-operators