|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码如下:- #include <stdio.h>
- void main()
- {
- int a,b,c,d;
- long long sum;
- while(scanf("%d %d %d %d",&a,&b,&c,&d),a!=0||b!=0||c!=0||d!=0){
- sum=a+b-c*d;
- printf("%lld\n",sum);//long long 类型用%lld
- printf("%lld\n",(long long)a+b-c*d);//long long 类型用%lld
- printf("%lld\n",a+b-c*d);//int 类型用%lld
- }
- }
复制代码
请问各位为什么当输出值为负数时,第三行代码会输出错误的值?仅仅是因为控制符不匹配吗?那为什么值为正值时就正常呢?
注:作业代码,当输入1 2 3 4时输出值为负,输入4 3 2 1时输出值为正
题目如下:
输入描述
有多组输入, 每组输入占一行.
每行仅含四个整数A, B, C, D (-10^9 ≤ A, B, C, D ≤ 10^9).
0 0 0 0代表输入结束, 你不应该处理它.
输出描述
对于每组数据, 输出A+B-C*D.
本帖最后由 风扫地 于 2019-6-19 18:21 编辑
严重性 代码 说明 项目 文件 行 禁止显示状态
警告 C4477 “printf”: 格式字符串“%lld”需要类型“__int64”的参数,但可变参数 1 拥有了类型“int” ConsoleApplication1 c:\users\veepoo\desktop\414_第三大的数\consoleapplication1\consoleapplication1\main.c 10
请考虑在格式字符串中使用“%I32d”
是不匹配造成的。
sum 本身就是lld匹配
(long long)a+b-c*d a被强转为ll,计算结果向更长数据类型进行扩展,得到的结果是ll
a+b-c*d 计算结果为int
-------------------------------
输入1 2 3 4
得到结果: -9 -9 4294967287
很显然,格式控制符不一样,取的数据长度不一样,传进去
我看了一下 4294967287对应的16进制数是 0xFFFFFFF7
而0xFFF7恰好是-9,
32位的-9传入进去给了一个int64的数。
指定了lld就会取64位数据。
我只能解释到这里了。。
|
|