有没有一种方法可以在C中表达一个int的数学模块?

时间:2018-11-11 16:18:34

标签: c math

我的意思是| |不是这个 %。 假设我们有两个整数x和y以及整数z。 现在

z = x - y

有没有一种表达| z |的方法?因此,如果z为正,则保持正值;如果z为负,则变成相反的值?我并不是要用if来表达它,而只是用数学方程式,符号或类似的东西来表达。

2 个答案:

答案 0 :(得分:1)

您需要math.h标头中提供的abs()函数。

示例:

z = abs(x - y);

答案 1 :(得分:1)

如果没有abs()函数,则采用第二种方式(无分支):

  int num;

  printf("Enter num: ");
  scanf("%d", &num);
  printf("Abs=%d\n", num*(1+(num<0)*-2));

经过StoryTeller评论后编辑:

该技巧之所以有效,是因为条件测试(如“ <”)返回0(对于false)或1(对于true)。我们可以将返回的数字部署在更复杂的表达式中。在这种情况下,我们需要一个返回1或-1的表达式。如果数字num不小于0,即不为负,则“ num <0”返回0,表达式给出1 +(-2 * 0)=1。数字num保持不变。如果num IS小于0,即为负,则表达式返回-1:1 +(-2 * TRUE),其中TRUE的值为1。

现在有1或-1(取决于num为负数),简单的乘法会在需要时反转num的符号。