【问题标题】:Why is my power operator (^) not working?为什么我的电源运算符 (^) 不起作用?
【发布时间】:2011-06-18 02:47:38
【问题描述】:
#include <stdio.h>

void main(void)
{
    int a;
    int result;
    int sum = 0;
    printf("Enter a number: ");
    scanf("%d", &a);
    for( int i = 1; i <= 4; i++ )
    {
        result = a ^ i;

        sum += result;
    }
    printf("%d\n", sum);
}

为什么^ 不能作为电力运营商工作?

【问题讨论】:

  • 在我用“int”替换 main() 的返回值后对我来说很好。不过,我没想到它会起作用,因为通常使用&lt;stdio.h&gt;&lt;math.h&gt; 而不是"stdio.h""math.h"。但看起来 GCC 并不在乎。
  • @Abid 编辑问题通常很好,但在这种情况下,编辑使问题变得毫无意义(您已经用解决方案替换了问题)。最好留下原始问题以便其他人可以学习 - 但现在只是令人困惑(问题中没有“^”)。建议您恢复到作为问题有意义的最后一次编辑
  • 改回使用^,因为否则问题(和答案)毫无意义。由于 peoro 正确回答了您的问题,您应该接受它并继续前进。如果您有另一个问题,请再问一个问题。不要编辑这个让所有的工作变得毫无意义。
  • @Sergey Tachenov:哦,我现在知道你使用了 pow()?我以为你得到了 OP 的原始代码(用 ^ 表示 pow)可以工作。
  • void main ???呃...

标签: c++ c


【解决方案1】:

首先,C/C++ 中的^ 运算符是按位异或。与权力无关。

现在,关于您使用 pow() 函数的问题,some googling 表明将参数之一转换为 double 会有所帮助:

result = (int) pow((double) a,i);

请注意,我还将结果转换为 int,因为所有 pow() 重载都返回双精度,而不是 int。我没有可用的 MS 编译器,所以我无法检查上面的代码。

自 C99 起,there are also float and long double functions called powf and powl respectively,如果有帮助的话。

【讨论】:

    【解决方案2】:

    在 C 中 ^ 是按位异或:

    0101 ^ 1100 = 1001 // in binary
    

    没有幂运算符,您需要使用 math.h 中的 pow 函数(或其他类似函数):

    result = pow( a, i );
    

    【讨论】:

    • 我使用了那个函数..但是:/它给出了一个错误,即对重载函数的模糊调用..
    • @Abid Ali:你需要包含 math.h。将此行放在文件的开头:#include &lt;math.h&gt;
    • @Abid Ali:您用来编写和编译 C 代码的 程序 不遵循 C 标准:它无法编译有效的 C 代码。不知道为什么。我建议您切换到更符合标准的编译器。如果您使用的是 Windows,请尝试使用 Dev-C++(例如)下载和编写程序,它使用 GCC 作为编译器。无法帮助您找出为什么该代码不适用于 microsoft studio。
    • @peoro,重载宏?没有输入宏,它们接受任何东西。并且 C 不可能有重载的函数,因为没有名称修饰。关于该错误,一些谷歌搜索表明一种解决方法是将其中一个参数转换为 double,如 (int) pow((double) a,i) - 我也转换了结果,因为它返回 double,而不是 int。
    • @Abid Ali:尝试用这一行替换该行:pow( (double)a, (double)i );
    【解决方案3】:

    pow() 不适用于int,因此会出现错误“错误 C2668:'pow': ambiguous call to overloaded function”

    http://www.cplusplus.com/reference/clibrary/cmath/pow/

    ints 编写你自己的幂函数:

    int power(int base, int exp)
    {
        int result = 1;
        while(exp) { result *= base; exp--; }
        return result;
    }
    

    【讨论】:

    • ints 应该自动升级为doubles,不是吗?无论如何,您的链接是关于 C++ 的。
    • 由于这个函数接受浮点数和双精度数,当你用整数调用它时,它不知道应该将整数提升到什么类型。
    • “无论如何,你的链接是关于 C++ 的。”但是发帖人使用的是 C++ 编译器,因为他因为重载而出错。
    • 这在几个方面都不是最理想的。首先,您将按照 exp 中给出的次数运行循环。根据 int 的大小,这可能会很多。然而,有意义的最大指数是 pow(2, sizeof(int)*CHAR_BIT-1)。但还有更多的改进空间。 pow(x, y) == pow(2, n) * pow(x', r)。术语 pow(2,n) 可以通过简单的位移 n 来实现。确定 x' 和 r 可能比迭代该循环更快。
    • 我已经给出了最简单的实现作为例子,算法教科书里都有。
    【解决方案4】:

    首先^Bitwise XOR operator 不是幂运算符。

    你可以用其他东西来求任意数的幂。你可以使用for loop to find power of any number

    这是一个寻找 x^y 的程序,即 xy

    double i, x, y, pow;
    
    x = 2;
    y = 5; 
    pow = 1;
    for(i=1; i<=y; i++)
    {
        pow = pow * x;
    }
    
    printf("2^5 = %lf", pow);
    

    您也可以简单地使用pow() function to find power of any number

    double power, x, y;
    x = 2;
    y = 5;
    power = pow(x, y); /* include math.h header file */
    
    printf("2^5 = %lf", power);
    

    【讨论】:

    • 你不应该使用名称pow作为变量的名称,因为它是一个内置函数的名称。
    【解决方案5】:

    您实际上必须使用 pow(number, power);。不幸的是,克拉在 C 语言中不能用作能量符号。很多时候,如果您发现自己无法使用另一种语言做某事,那是因为有一个不同的函数可以为您做这件事。

    【讨论】:

    • 插入符号确实“起作用”,只是没有按照您的预期去做。
    • 好吧,它们不适用于权力,需要一个函数。但是提出问题的用户说他的插入符号不起作用,我回答说特定方法在 C 中不起作用。但是有效的一点,我会编辑。
    【解决方案6】:

    包含 math.h 并使用 gcc test.c -lm 编译

    【讨论】:

    • 恐怕 OP 没有使用 GCC。 :-(
    • @Abid: 你用的是哪个编译器?
    • @peoro,有趣的是它在 GCC 中运行良好。为什么它不能与 MS 编译器一起工作,这让我很吃惊。
    • @Sergey Tachenov:同意你的观点:阅读我对我的回答的最后评论。
    • 我正在使用 MICROSOFT VISUAL STUDIO 2008
    【解决方案7】:

    无法使用^(按位异或)运算符来计算数字的幂。 因此,为了计算数字的幂,我们有两个选择,要么使用 while 循环,要么使用 pow() function

    1.使用while循环。

    #include <stdio.h>
    
    int main() {
    
        int base, expo;
        long long result = 1;
    
        printf("Enter a base no.: ");
        scanf("%d", &base);
    
        printf("Enter an exponent: ");
        scanf("%d", &expo);
    
        while (expo != 0) {
            result *= base;
            --expo;
        }
    
        printf("Answer = %lld", result);
        return 0;
    }    
                 
    

    2.使用pow()函数

    #include <math.h>
    #include <stdio.h>
    
    int main() {
    
        double base, exp, result;
    
        printf("Enter a base number: ");
        scanf("%lf", &base);
    
        printf("Enter an exponent: ");
        scanf("%lf", &exp);
    
        // calculate the power of our input numbers
        result = pow(base, exp);
    
        printf("%.1lf^%.1lf = %.2lf", base, exp, result);
    
        return 0;
    }
         
    

    【讨论】:

      【解决方案8】:

      如果您要计算以 2 为底的幂,可以使用按位移位运算符来计算幂。例如,假设您要计算 2 的 8 次方。

      2 << 7
      

      【讨论】:

        【解决方案9】:

        它不起作用,因为 c 和 c++ 没有任何运算符来执行幂运算。

        你可以做的是,你可以使用 math.h 库和使用 pow 函数。

        `   #include<stdio.h>
            #include<math.h>
            int main(){
                int base = 3;
                int power = 5;
                pow(double(base), double(power));
                return 0;
             }`
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-12
          • 1970-01-01
          • 1970-01-01
          • 2015-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多