-1.0 和-1在c语言中的区别。最好能举个实际预算的例子。
答案:4 信息版本:手机版
解决时间 2019-10-04 23:09
已解决
2019-10-03 23:11
-1.0 和-1在c语言中的区别。最好能举个实际预算的例子。
最佳答案
2019-10-03 23:20
-1.0是浮点型的,-1是整型的。本质不一样。具体的区别就像:-0.999是可能等于-1的,因为整型是四舍五入的。但-0.999不等于-1.0的,因为在与同为浮点型的两个数比较时不用转换的。但整型的数在C语言中是要转成浮点型来比较和计算的。所以-1可能转成接近-1的其他浮点数,比如-0.998什么的。
全部回答
1楼
2019-10-04 02:00
条件运算符(?:)这个表达式,它的结合是右结合式的。就是说自右向左运算。这个是硬性的规定,没有为什么。
它属于三目运算符,对第一个表达式作真、假判断,然后根据结果返回另外两个表达式其中的一个的值。
?:
在运算中,首先对第一个表达式进行判断,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。
例如:
a=(b>0)?b:-b;
当b>0成立时(为真),将b赋值给a:a=b;当b>0不成立时,将-b赋值给a:a=-b。
有人觉得,这正是从左往右算的啊。不错,但是,结合性不是指这个。
一个多运算对象的表达式运算时的前后顺序是先看优先级,高优先级先计算,低优先级后计算!在优先级相同的情况下,要看结合性,左结合性的运算符由左向右运算,右结合的运算符由右向左运算!
所以,在有相同优先级的时候才考虑到结合性。
看这个:
a?b:c?d:e
这个要怎么算?先看优先级,两个一样。再看结合性,右结合,所以:
先算c?d:e
再算 a?b:(c?d:e) 这就是所谓右结合。如果是左结合的话 就是先算a?b:c
不知道你明白了没有。
另外,并非只有=是右结合的 c语言书后都有,结合性和优先级如下:
优先级 运算符 结合性
(最高) () [] -> . 自左向右
! ~ ++ -- + - * & sizeof 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左 (最低) , 自左向右
希望能给你帮助。
2楼
2019-10-04 01:04
这个主要用于公式计算时,比如:1/3 = 0 而 1.0/3 != 0就是这个意思当然不能把浮点数赋值给整形,但可以将整形赋值给浮点型
3楼
2019-10-03 23:58
数学上是0.5。 但在c语言中,则取决于表示和编译器等。 可以用printf验证: printf("%.2f", 1.0/2),输出:0.50 c表达式(1.0/2),符号 / 表示除,所以(1.0/2)的值等于0.5。其中,1.0是个单精度浮点数格式的字面值常量所以它是个浮点型数据,以浮点型编码于内存; 2是个整数格式的字面值常量所以它是个整型数据,以整数型编码于内存 。 而c语言规定,一个混合数据类型运算表达式的运算结果的数据类型是表达式中存在的最“大”(double>float>int>char…)的那个类型。例如一个int与一个float的运算表达式的值是float的。 所以这题的表达式(1.0/2)的值将是浮点型的,因此能得到0.5 。 注意,0.5是表达式(1.0/2)的值,它会存于寄存器或内存。而不是(1.0/2)的值的另种类型的拷贝、或解释等: 如下面的,将不会得到想要的结果: int r = 1.0/2; printf("%f", r);//0. printf("%d", 1.0/2);//0
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯