C160 发表于 2020-11-26 14:22:48

大哥们帮忙看看

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

int main()
{
      int result;

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

      return 0;
}

这里面的负一是啥意思

昨非 发表于 2020-11-26 14:34:39

整形数的范围就是2的32次方
其中正负各一半,所以正值最大2的31次方,算上0,最大值只能是2的32次方减一

昨非 发表于 2020-11-26 14:35:11

防止溢出

风过无痕1989 发表于 2020-11-26 15:27:11

负一,楼上已经给你解释了
不过你这个程序应该会有报错 ------- 因为 pow() 的类型是 double 型,而你定义的是 int 型,故而会有警告:从 double 型转换到 int 型,会有数据丢失

C160 发表于 2020-11-26 17:32:40

昨非 发表于 2020-11-26 14:34
整形数的范围就是2的32次方
其中正负各一半,所以正值最大2的31次方,算上0,最大值只能是2的32次方减一

2的31次方减一吧,..我刚刚又回过头去看了一下甲鱼哥之前讲的那个求范围的那个,他写的好像是负2的十六次方到2的十六次方

C160 发表于 2020-11-26 17:40:44

风过无痕1989 发表于 2020-11-26 15:27
负一,楼上已经给你解释了
不过你这个程序应该会有报错 ------- 因为 pow() 的类型是 double 型,而你定义 ...

Double不是int的一种表现形式吗?。。这个数据好像是正确的运行完之后{:10_257:}{:10_257:}

昨非 发表于 2020-11-26 17:44:42

C160 发表于 2020-11-26 17:40
Double不是int的一种表现形式吗?。。这个数据好像是正确的运行完之后

double精度高于int,

昨非 发表于 2020-11-26 17:46:07

C160 发表于 2020-11-26 17:32
2的31次方减一吧,..我刚刚又回过头去看了一下甲鱼哥之前讲的那个求范围的那个,他写的好像是负2的十六次 ...

1字节8位,int型占4字节,就是32位

风过无痕1989 发表于 2020-11-26 17:47:09

C160 发表于 2020-11-26 17:40
Double不是int的一种表现形式吗?。。这个数据好像是正确的运行完之后

double 型是双精度的数据格式,存在一个精度问题,比如:
int 2 若转换为 double 型,就是 2.000000
所以,在转换过程中,就会有数据丢失的情况

C160 发表于 2020-11-26 19:12:23

昨非 发表于 2020-11-26 17:46
1字节8位,int型占4字节,就是32位

讲的也是四个字节

昨非 发表于 2020-11-26 19:21:44

C160 发表于 2020-11-26 19:12
讲的也是四个字节

那肯定是四个字节啊,一共32位

昨非 发表于 2020-11-26 19:23:04

这不难理解的

C160 发表于 2020-11-26 19:54:32

昨非 发表于 2020-11-26 19:23
这不难理解的

{:10_269:}{:10_269:},四个字节三十二位范围是负31次方到正31,但是甲鱼哥之前那个教学视频写的负16次方到正16

昨非 发表于 2020-11-26 19:57:09

C160 发表于 2020-11-26 19:54
,四个字节三十二位范围是负31次方到正31,但是甲鱼哥之前那个教学视频写的负16次方 ...

哪一期?

C160 发表于 2020-11-26 21:11:36

老版的第三期,

C160 发表于 2020-11-26 21:13:02

让我们求数据类型的范围举的一个例子

昨非 发表于 2020-11-27 21:37:41

C160 发表于 2020-11-26 21:13
让我们求数据类型的范围举的一个例子

下次回复记得点击别人帖子左下角,不然收不到消息的

昨非 发表于 2020-11-27 21:42:22

这是去掉-1后溢出的情况
#include <stdio.h>
#include <math.h>

int main()
{
      int result;

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

      return 0;
}
输出:result = -2147483648

正常:
#include <stdio.h>
#include <math.h>

int main()
{
        int result;

        result = pow(2, 31)-1 ;
        printf("result = %d\n", result);
        return 0;
}
输出result = 2147483647

这段代码的本意就是输出int的最大值,
如果小甲鱼说的不是这个,
那只能说小甲鱼错了或者他讲的目的不是要输出int的最大值


没什么其他问题就把帖子结了吧

C160 发表于 2020-11-28 10:04:21

昨非 发表于 2020-11-27 21:42
这是去掉-1后溢出的情况
输出:



好的,明白了,谢谢了
页: [1]
查看完整版本: 大哥们帮忙看看