lpx9393 发表于 2020-1-13 14:01:35

pow()后加了一个-1,有什么含义吗?我不加的话计算结果也一致,为啥?谢谢

#include <stdio.h>
#include <math.h>

int main()
{
      int result;

      result = pow(2, 31) - 1;      
      printf("result = %d\n", result);

      return 0;
}

人造人 发表于 2020-1-13 14:04:37

#include <stdio.h>
#include <math.h>

int main()
{
        int result;

        result = pow(2, 31) - 1;
        printf("result = %d\n", result);

        return 0;
}

/*
result = 2147483647
请按任意键继续. . .
*/


#include <stdio.h>
#include <math.h>

int main()
{
        int result;

        result = pow(2, 31);
        printf("result = %d\n", result);

        return 0;
}

/*
result = -2147483648
请按任意键继续. . .
*/

lpx9393 发表于 2020-1-13 14:09:25

人造人 发表于 2020-1-13 14:04


谢谢回复,可是我复制了你的代码验证了,结果也是没有负号,我搞不懂

人造人 发表于 2020-1-13 14:11:41

lpx9393 发表于 2020-1-13 14:09
谢谢回复,可是我复制了你的代码验证了,结果也是没有负号,我搞不懂

截图,或者贴出输出结果
不然我怎么看得到?

人造人 发表于 2020-1-13 14:13:28

#include <stdio.h>

int main(void)
{
        printf("int: %lu\n", sizeof(int));
        return 0;
}

/*
int: 4
请按任意键继续. . .
*/

lpx9393 发表于 2020-1-13 14:16:55

人造人 发表于 2020-1-13 14:11
截图,或者贴出输出结果
不然我怎么看得到?

#include <stdio.h>
#include <math.h>

int main()
{
      int result;

      result = pow(2, 31);
      printf("result = %d\n", result);

      return 0;
}
result = 2147483647




#include <stdio.h>
#include <math.h>

int main()
{
      int result;

      result = pow(2, 31) - 1;
      printf("result = %d\n", result);

      return 0;
}
result = 2147483647

人造人 发表于 2020-1-13 14:20:50

#include <stdio.h>

int main(void)
{
      printf("int: %lu\n", sizeof(int));
      return 0;
}

/*
int: 4
请按任意键继续. . .
*/

人造人 发表于 2020-1-13 14:22:28

lpx9393 发表于 2020-1-13 14:16


不,不可能,一定是你哪里操作错了

人造人 发表于 2020-1-13 14:23:27

lpx9393 发表于 2020-1-13 14:16


截图,代码截图,执行结果也截图

lpx9393 发表于 2020-1-13 14:39:58

人造人 发表于 2020-1-13 14:23
截图,代码截图,执行结果也截图

额我不会截图,找不到,第一次用,抱歉
不过我重启了devc,然后重新运行,这次就有报错了,如下:
8        16        C:\Users\86135\Desktop\未命名2.cpp        overflow in implicit constant conversion [-Woverflow]
谢谢回答{:5_106:}

人造人 发表于 2020-1-13 14:41:42

lpx9393 发表于 2020-1-13 14:39
额我不会截图,找不到,第一次用,抱歉
不过我重启了devc,然后重新运行,这次就有报错了,如下:
8        16       ...

一个警告,程序应该可以运行,运行一下,看看结果

lpx9393 发表于 2020-1-13 14:45:30

人造人 发表于 2020-1-13 14:41
一个警告,程序应该可以运行,运行一下,看看结果

#include <stdio.h>
#include <math.h>

int main()
{
      int result;

      result = pow(2, 31);
      printf("result = %d\n", result);

      return 0;
}
result = 2147483647

--------------------------------
Process exited after 0.04251 seconds with return value 0
请按任意键继续. . .



人造人 发表于 2020-1-13 14:53:36

lpx9393 发表于 2020-1-13 14:45


你的意思是减1和不减1输出都是一样的?
那就是你的操作问题了

人造人 发表于 2020-1-13 14:54:12

我不相信是编译器问题

入门者 发表于 2020-1-13 14:55:03

你那个pow()后面如果不-1就会得到一个错误结果,因为数据溢出了,int型定义的reresult范围(-2^31~2^31-1),至于你得到结果一样,可能是没有重新编译导致了exe没有重新生成,运行的还是上次结果.
页: [1]
查看完整版本: pow()后加了一个-1,有什么含义吗?我不加的话计算结果也一致,为啥?谢谢