我是C的新手
我正试图将某些东西置于某种力量之下
例如。 5 ^ 3 = 125;
但是当我编码时
#include <math.h>
...
printf("%d", 5^3);
我得到6.我做了一些根本错误的事情吗?
答案 0 :(得分:16)
^
是C中的按位XOR运算符。
5
在二进制表示中为101
,3
为011
。所以101 XOR 011 = 110
,即十进制6
。
您想要的是pow(5,3)
(包括math.h
之后可用)。但请注意,它作用于双精度而不是整数,因此返回值将是浮点数,通常不精确。如果需要精确的整数取幂,则必须使用其他库或实现自己的幂函数。这并不难,对于算法,请参阅exponentiation by squaring。标准C不包括整数取幂的函数。无论如何使用整数求幂,重要的是要处理overflows,这可能已经发生在小输入值上。
同样要打印返回的double,您必须将double转换为int printf("%d", (int)pow(5,3))
或将其打印为浮点printf("%f", pow(5,3))
答案 1 :(得分:3)
^
是C中的XOR运算符。
相反,您应该使用pow
中的math.h
功能,但pow
会返回双
#include <math.h>
...
printf("%d", (int)pow(5, 3));
答案 2 :(得分:2)
您应该使用pow(5,3)
。
您在那里使用按位XOR(^
)运算符:在二进制文件中101 ^ 011
,110
或6
(你当前的答案)在否定。
答案 3 :(得分:2)
C 中有没有指数运算符(幂)。 ^
使用的是C语言中的按位XOR
运算符。执行5^3
将返回6
,而不是125
。对于取幂,您可以使用标准库函数pow
签名:
double pow(double x, double y);
标题:
#include <math.h>
更改
printf("%d", 5^3);
到
printf("%d",(int)pow(5,3));
在C ++中不要使用<math.h>
。相反,您可以使用<cmath>
。
答案 4 :(得分:0)
其他人已经建议使用pow
中的math.h
函数,因为^
不是执行权限的正确运算符。另外,您也可以编写自己的电源功能,以获得乐趣。
int power(int base, int exp)
{
int result = 1;
while(exp)
{
result = result * base;
exp--;
}
return result;
内部主要:
printf("%d\n", power(5,3));
在这种情况下,您不必使用强制转换运算符,因为pow()
不适用于int。