数学能力运算符未按预期工作

时间:2010-01-08 13:38:52

标签: c math

short sho1, sho2;
printf("Enter two shorts.\n");
scanf("%hd %hd", &sho1, &sho2);
printf("%hd^%hd is %hd.\n", sho1, sho2, sho1^sho2);

当我输入'2 2'时,我得到这个输出:

  

2 ^ 2是0。

为什么?我正在Eclipse中使用MinGW GCC编译器,以防万一。

6 个答案:

答案 0 :(得分:18)

^不是C中的数学幂运算符,而是bitwise exclusive-OR operator。你可能想要pow function,这需要两个双打。

答案 1 :(得分:7)

您没有使用您认为正在使用的运营商。

^bitwise XOR operator

您正在寻找pow function

  

原型:双粉(双b,双p);

     

头文件:math.h(C)或cmath(C ++)

     

说明:此函数将b提升为p幂。

维基百科有一个有用的list of operators,它在C和C ++中有效。

答案 2 :(得分:3)

^运营商不是电力运营商;它是按位XOR运算符。对于幂运算符,您希望使用math.h中声明的函数pow。因此:

pow(2.0, 2.0)

将返回4.0(故意强调参数和返回值是双倍的。)

请进一步注意,pow会返回一个double,因此您必须将格式说明符更改为%g

printf("%hd^%hd is %g.\n", sho1, sho2, pow((double)sho1, (double)sho2));

答案 3 :(得分:3)

C中没有“power”运算符 - ^是XOR(按位异或)运算符

答案 4 :(得分:2)

您可以在C。

中使用pow()函数
pow(base, exponent);

它在math.h头文件中。

答案 5 :(得分:1)

在c ^中,是独家或运营商。为了做权力,你必须使用pow  功能

pow(2,2)