C语言 表达式3.5+1/2的计算结果是 3.5 为什么?

是不是因为1和2都是整形所以得出的结果也是整形的不过我记得3.5是实型1和2是整形一个实型和一个整型运算时系统自动把整型转变成实型啊谁帮我解释一下谢谢啦... 是不是因为 1和2 都是整形 所以得出的结果也是整形的 不过我记得 3.5是实型 1和2是整形 一个实型和一个整型运算时 系统自动把整型转变成实型啊 谁帮我解释一下 谢谢啦 展开
 我来答
freeeeeewind
2017-08-28 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1301万
展开全部
这是因为表达式1/2的结果为0(整型0)。因此表达式3.5+1/2的结果为3.5(double类型)
表达式Exp:3.5+1/2 由以下两个表达式Exp1和Exp2构成:
Exp=Exp1+Exp2=3.5+1/2

(1)Exp1: 3.5,这是一个常数表达式,表达式的值为3.5,值类型为double;
(2)Exp2: 1/2,这个表达式中常数1和2的类型为int。表达式的值为0,值的类型是int。
(3)Exp的最终结果为3.5,值的类型为double
kevin_sxw
2017-08-27 · TA获得超过165个赞
知道小有建树答主
回答量:80
采纳率:0%
帮助的人:35.1万
展开全部

对于表达式“3.5+1/2”,先看看计算顺序:

  1. 根据四合运算计算顺序,首先计算除法"1/2"获得结果result;

  2. 然后再计算加法“3.5+result”。

在第一步的计算中,除数"1"和被除数"2"在做计算时编译器默认是int类型,所以计算结果也会是int类型。而对于int类型,“1/2”的结果是“0”,所以:3.5+1/2 = 3.5 + 0 = 3.5

想要获得正确的结果在写表达式时应该加入浮点数标识(加小数点),让编译器按照浮点数的方式计算,正确的表达式是:

3.5 + 1.0/2.0 = 3.5 + 0.5 = 4.0

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-15
展开全部
在两个操作数相同的时候是不会转化的
就是说 整形 除以 整形 结果 也是整形
只要两个操作数不一致的时候才会向高级别的转向,如 整形 -> 浮点
3.5 + 1/2
3.5 + 1/2.0

试试这两种形式
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9f8ba65
2017-08-14 · TA获得超过1017个赞
知道小有建树答主
回答量:384
采纳率:86%
帮助的人:90.5万
展开全部

因为1/2的结果是0。

这个是C语言类型处理的问题。1/2编译器处理的时候会认为1和2都是整数,而整数与整数相除结果还是整数,并且是向下取整的整数。虽然3.5是浮点数,但是1/2是先计算的。

如果想要1/2结果是0.5就需要将式子转化为浮点数的除法,方法有两种:

  1. 将1写成1.0,比如1.0/2结果就是0.5。

  2. 将1强制转化为浮点数,比如((float)1)/2结果也是0.5。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叫我文小浠
2017-08-05
知道答主
回答量:17
采纳率:0%
帮助的人:1.8万
展开全部
首先 1 和 2在该表达式中默认为int型数
其次 1/2 两个整型数相运算是只能得到int型数,在这里表现为只得到该除法的商,商为0
再者,C语言中运算是向上兼容的顺序为:char=short<int<unsigned<long<double和float<double,比如式子中3.5是float型,但在运算中自动转为double(这个原因不在此详细说明),而double和int((int)1/(int)2=(int)0)运算结果也变为了double型
所以你可以大概了解到你最后的结果为3.5,而不是4了,也不是3。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式