如何提高[重复]次方

问题描述 投票:0回答:5

我对 C 很陌生

我正在尝试赋予某物力量

例如。 5^3=125;

但是当我编码时

#include <math.h>
...

printf("%d", 5^3);

我得到 6。我是不是做错了什么??

c math
5个回答
20
投票

^
是 C 中的按位异或运算符。

5
在二进制表示中是
101
3
011
。所以
101 XOR 011 = 110
,十进制表示为
6

您想要的是

pow(5,3)
(像您一样包含
math.h
后即可使用)。但请注意,它作用于双精度数而不是整数,因此您的返回值将是浮点并且通常不精确。如果您需要精确的整数幂,那么您要么必须使用额外的库,要么实现自己的幂函数。这并不难,对于算法,请参阅通过平方求幂。标准 C 不包含整数求幂函数。无论如何,对于整数取幂,重要的是要注意溢出,对于小输入值可能已经发生这种情况。

还要打印返回的双精度数,您必须将双精度数转换为 int

printf("%d", (int)pow(5,3))
或将其打印为浮点
printf("%f", pow(5,3))


4
投票

^
是 C 中的 XOR 运算符。

相反,您应该使用

pow
中的
math.h
函数,但是
pow
返回 double

#include <math.h>
...

printf("%d", (int)pow(5, 3));

4
投票

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>


3
投票
您应该使用

pow(5,3)

您正在使用按位 XOR (

^

) 运算符:在二进制中是 
101 ^ 011
,在十进制中是 
110
,或 
6
(您当前的答案)。


3
投票
其他人已经建议使用

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。

© www.soinside.com 2019 - 2024. All rights reserved.