我试图找到绝对值,我认为只需使用“~”或其他东西来反转符号就可以了。
我试图找到绝对值,我认为只需使用“~”或其他东西来反转符号就可以了。
float newValue = oldValue * -1;
float newValue = -(oldValue); //() aren't needed, I just use them out of habit
要改变符号,将负号放在它的前面。
abs()
在iPhone上不会陷入困境;它只会返回INT_MIN。 - Stephen Canonint checked_abs(int)
。 - David Thornley-(expr)
可以完全满足你的需求。int x = -7;
int y = 7;
x = -x; // x is now 7
y = -y; // y is now -7
~(expr)
会翻转输入中的所有位。-x将给你x的相反数。
*(unsigned int*)&x ^= (1<<31)
如果你在为像iPhone这样拥有Cortex A8处理器(或类似处理器)的设备编写代码时,想要避免使用双精度浮点数,并且在内部循环中使用浮点数时也要避免使用条件语句。因此,你可以这样做:
*(unsigned int*)&x ^= ((x<0) << 31);
这将在不使用分支指令的情况下将负数变为正数。如果这是在内部循环中,它将比在iPhone上使用其他方法快5到20倍。如果不在内部循环中,那么你可能不太关心!x = 0 - x;
这是什么意思?还是我理解错了?
这是一个糟糕的解决方案,不确定发生了什么。请查看下面使用abs()的正确答案。
虽然这是一个旧问题,但也许这个答案会帮助到你们中的一些人。我想根据另一个结果(比如一个布尔值mustBeNegative)得出一个数字的正负值,我是这样做的:
int number = 7;
if(mustBeNegative)
{
number = number * 1;
}
else
{
number = number * -1;
}
根据"mustBeNegative"的值,该数字将是其正值或负值。当数字已经是负数时,它将变为正数,反之亦然。