假设变量a和b是32位整数,有一种方法可以比较两者,如果一个< b和1如果a> = b而不使用三元或比较运算符?
答案 0 :(得分:2)
你可以做到这一点,但它并不漂亮。
如上所述,问题是溢出。但你可以解决这个问题,如下:
return ((x - y) ^ ((x ^ y) & ((x - y) ^ x))) >>> 31;
对于签名版本,或
return ((~x & y) | ((~x | y) & (x - y))) >>> 31;
对于未签名的版本。
>>>
有一个无符号的右移,就像在Java中一样。
将它们与x = b, y = a
一起使用,使它们与您的功能相匹配。
你可以在Hacker's Delight中找到那些(和其他人),名称为“比较谓词”。
答案 1 :(得分:0)
首先我们取两个数字的区别。然后我们使用数字作为两个数字的补充这一事实来检查符号。
int Compare(int a, int b)
{
int c = a - b;
int k = (c >> 31) & 1 ^ 1;
return k;
}