unsigned int和int之间的比较,不使用强制转换运算符

时间:2015-06-04 13:21:04

标签: c int compare type-conversion unsigned-integer

我环顾四周的每个人都有一个关于我的问题的话题但我找不到。

unsigned int x = 5; 
int y = -3;
if(y<x)
   func1();
else
   func2();
调用

func2。但是我希望调用func1

我知道在比较这些值时我必须使用强制算子 但是不允许使用强制转换操作符或更改变量的类型。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

首先检查y是否为负值,然后知道这一点,您知道x总是更大,因为它是无符号的。

如果y不是负数,则将其值直接与x进行比较。我不认为这会导致问题,因为没有负面信号。

见下面的例子:

if(y<0)
{
    //x>y
    func1();
}
else if (y<x)
{
    //lets say y=3, and x=5
    func1();
}
else
{
    func2();
}

答案 1 :(得分:2)

您可以通过以下方式在if语句中编写条件

Date

答案 2 :(得分:0)

使用更宽的整数数学进行比较。没有使用强制转换,变量类型不会改变 优化的编译器不会进行乘法,只是整数加宽 可以使用* 1LL+ 0LL代替

int main(void) {
  long long ll = 1;
  unsigned int x = 5;
  int y = -3;
  // if (y < x)
  if (ll * y < ll * x)
    puts("func1();");
  else
    puts("func2();");
  return 0;
}

Output: func1();

long long通常比int宽:请参阅How to determine integer types that are twice the width as `int` and `unsigned`?

答案 3 :(得分:-1)

尝试补充y~y),它变为2

unsigned int x = 5; 
int y = -3;
if(~y<x)
   func1();
else
   func2();