简单的C语言题,求解释!!!

在VC++6.0上,int类型最大整数大约为21亿左右,char类型最大值为128,那么下面程序输出什么?请解释!#include<stdio.h>intmain(){i... 在VC++6.0上,int 类型最大整数大约为21亿左右,char类型最大值为128,那么下面程序输出什么?请解释!
#include <stdio.h>

int main()
{
int b = 2100000000 * 2 / 3;
char a = 128 *2 /3;

printf("a = %d, b = %d\n", a, b);

return 0;
}
展开
 我来答
颜海镜
2013-09-05 · TA获得超过1564个赞
知道小有建树答主
回答量:445
采纳率:0%
帮助的人:166万
展开全部

a = 85, b = -31655765

85就不用解释了吧,因为 char类型无符号,所以8位全部表示字符,128只占7位,乘2后变为256,再除以3 128*2/3 = 85.333333333333333333333333333333 小数部分舍去了。


b呢是整形 有符号,最高位表示符号 b * 2 = 4200000000 = 11111010010101101110101000000000 = -2052516352 /3 = -684172117

更多追问追答
追问
嗯 你很聪明,但是我需要的是b的值
追答
怎么我算出来不对啊,奇怪啊,是不是和计算机里面的补码什么的有关系,不是计算器里面 的 除法也是用的加法和移位来算的么
夕落阳尽bw
2013-09-05 · TA获得超过407个赞
知道小有建树答主
回答量:365
采纳率:50%
帮助的人:220万
展开全部
额,这个属实比较绕。
21 0000 0000 * 2 = 42 0000 0000;这时候已经溢出了(由于是有符号数),这时候计算机中存储这个数的值是FA 56 EA 00 (原码);
由于是有符号数,计算机读出来就读成了FA 56 EA 00(补码),
根据负数的补码等于其反码+1,符号位不变,那实际上这个数的原码又是85 A9 16 00 ,高位是符号位,
所以这个数就是负的05 A9 16 00即-94967296,
再把这个数除以3,得到-31655765.3333 ,
由于是整型,所以取整,得到-31655765

char进行运算的时候,会先进行类型提升,记得是提升到整型。
char 是无符号还是有符号得看定义,有些处理器默认是无符号的,这在下位机比较多,上位机的char一般都指有符号的。
更多追问追答
追问
其实我是想问,是不是在VC++6.0中,在运算一个表示时,其中的每一步(加减乘除...)在执行时是不是有一个临时的缓存区去存储这一步的结果,如果有,那么是多大,如果没有,那么为什么a值在执行128*2溢出时,再除3又会恢复!!
追答
char类型进行运算的时候会进行类型的提升,即,那个128在运算的过程中就不是char型了,我记得会把char型提升到int型,所以不存在溢出的情况
可以看下这篇文章http://wenku.baidu.com/view/ef35d7ecaeaad1f346933fed.html
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
咔咔知识
2013-09-05
知道答主
回答量:21
采纳率:0%
帮助的人:8万
展开全部

char 确实是到128,但是在printf中有个输出格式 %d表示输出整形。此时输出的值并不受char的影响,所以能输出256,不是说char a = 256,而是int a = 2 * char a;


	int b = 2100000000 * 2 / 3;
char a = 128 *2 /3;
printf("sizeof(a) = %d, sizeof(b) = %d\n", sizeof(a), sizeof(b));
printf("a = %d, b = %d\n", a, b);
printf("2100000000 * 2 = %d\n",2100000000*2); // 4200000000 溢出变成负数
printf("128 * 2 = %d\n",128 * 2);  // 由于输出格式是%d int形,所以没有溢出
return 0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cjj796
2013-09-05 · TA获得超过8710个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:4124万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
撕心裂肺去努力
2013-09-05
知道答主
回答量:44
采纳率:0%
帮助的人:12.1万
展开全部
a = 85, b = -31655765
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式