起居有常 发表于 2020-2-16 22:41:28

小白求助

本帖最后由 起居有常 于 2020-2-16 22:50 编辑

刚刚看了零基础学C的数据范围,想把各类型数据的取值范围打一下
#include <stdio.h>
#include <math.h>
int main()
{
        printf("short =%d KB = %d bit 十进制数据范围是从 %d-%d ",sizeof(short),sizeof(short)*8,-pow(2,sizeof(short)*8-1),pow(2,sizeof(short)*8)-1);
}
结果打印出来前面的两个数据还是没问题 不过后面十进制数据范围是从 0 - 0

我再试了一下
int a = - pow(2,sizeof(short)*8-1);
printf("%d",a);
结果能得出 a = -32768
为何 - pow(2,sizeof(short)*8-1) 赋值给变量 a 时 ,能得出 -32768而直接打印的时候却变成 0 了呢?

请各位不吝赐教,谢谢!

人造人 发表于 2020-2-16 23:10:20

pow函数返回一个double,如果赋值给变量a,编译器会自动把double转换成int,但是在printf时编译器不能转换,所以出错

起居有常 发表于 2020-2-16 23:20:43

谢谢!
页: [1]
查看完整版本: 小白求助