【发布时间】:2013-09-24 02:06:36
【问题描述】:
我必须重写一个方法来判断 x 是否小于或等于 y,只使用按位运算符而不使用条件语句。到目前为止我有这个:
int isLessOrEqual(int x, int y)
{
int a = x + (~y) + 1;
return ((a&0x80000000) >> 31);
}
但我不知道如何防止溢出?谁能伸出援助之手?
【问题讨论】:
-
(不相关)请注意,如果值为负数,则右移有符号整数会导致实现定义的行为。
-
在此分配中,
+是否被视为位运算符? -
如果你仍然依赖 2 的补码,
x + ~y + 1is the same thing asx - y。以这种方式重写它不会防止任何溢出。 -
@harold 这正是我的问题!
标签: c logic bitwise-operators bits