数字溢出
源代码:#include<stdio.h>
int main()
{
int i;
printf("请输入数字:");
scanf("%d",&i);
if(i>2^32-1)
{
printf("数字溢出");
}
}
为什么输入一个很小的数字还是会显示数字溢出啊 ‘^’在C语言中不是乘方,而是按位异或
人造人 发表于 2019-6-2 23:09
‘^’在C语言中不是乘方,而是按位异或
老哥那正常应该怎么打才能表示我想要的形式 本帖最后由 我叫MD 于 2019-6-2 23:20 编辑
imbA丶 发表于 2019-6-2 23:13
老哥那正常应该怎么打才能表示我想要的形式
使用 pow 函数
#include <math.h> //需要包含的头文件
int main()
{
int j;
j = pow(2, 32) - 1;
//pow(x,y); 意思是x的y次幂
return 0;
}
if(i > j)这样就好了 我叫MD 发表于 2019-6-2 23:18
使用 pow 函数
我把那个改成i>(pow(2,32)-1)
还是没用加了math.h这个文件 imbA丶 发表于 2019-6-2 23:13
老哥那正常应该怎么打才能表示我想要的形式
自己百度,关键字搜索:C语言pow函数
imbA丶 发表于 2019-6-2 23:19
我把那个改成i>(pow(2,32)-1)
还是没用加了math.h这个文件
你能给加个图片看下运行结果吗? 我叫MD 发表于 2019-6-2 23:25
你能给加个图片看下运行结果吗?
#include<stdio.h>
#include<math.h>
int main()
{
int i;
printf("请输入数字:");
scanf("%d",&i);
if(i>(pow(2,32)-1))
{
printf("数字溢出");
}
}
我不知道怎么给图,sorry新人 imbA丶 发表于 2019-6-2 23:32
我不知道怎么给图,sorry新人
我解释一下:pow的返回值是double类型,而返回的值(也就是2的32次方已经超出了double所能存储的值了),当超出的时候,就变成负数了,所以你随便输入一个数都大于返回的负数;
你把32改成31就不会这样了,试试看
如果成功了,希望采纳一下哦 我叫MD 发表于 2019-6-2 23:50
我解释一下:pow的返回值是double类型,而返回的值(也就是2的32次方已经超出了double所能存储的值了) ...
失败了。。。{:10_266:} imbA丶 发表于 2019-6-2 23:53
失败了。。。
你运行程序是怎么说的 我这边亲测没问题啊 谢谢, 我把i的类型变成float,然后就OK了谢谢两位大佬 爱你们 晚安 本帖最后由 bin554385863 于 2019-6-3 00:16 编辑
#include <stdio.h>
#include <math.h>
int main(int argc, char const *argv[])
{
int i = 0;
printf("请输入数值\n");
scanf("%d", &i);
if (i >= (long long)pow(2, 32))//double 类型不足以存放这么大的数字,强制转换成long long类型,或者float才行
{
printf("数字溢出");
}
else
{
printf("范围正常\n数字上限是:%lld", (long long)pow(2,32));
}
}
------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-bz35d0ub.s3m --stdout=Microsoft-MIEngine-Out-cp30lsys.2fd --stderr=Microsoft-MIEngine-Error-1g1iyetw.py4 --pid=Microsoft-MIEngine-Pid-b3yvjt4c.5j5 --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
请输入数值
1000000000000
范围正常
数字上限是:4294967296
E:\Administrator\Documents\My C>
页:
[1]