我环顾四周的每个人都有一个关于我的问题的话题但我找不到。
unsigned int x = 5;
int y = -3;
if(y<x)
func1();
else
func2();
调用 func2
。但是我希望调用func1
。
我知道在比较这些值时我必须使用强制算子 但是不允许使用强制转换操作符或更改变量的类型。
我该如何解决这个问题?
答案 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();