为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?
来源:学生作业帮助网 编辑:作业帮 时间:2024/08/07 02:21:18
![为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?](/uploads/image/z/10219721-41-1.jpg?t=%E4%B8%BA%E4%BB%80%E4%B9%88C%E8%AF%AD%E8%A8%80%E4%B8%ADint+i%3D3%2Cj%3D5%EF%BC%9Bfloat+x%3D2.5%EF%BC%9Bdouble+y%3D5.0%EF%BC%9B%E8%A1%A8%E8%BE%BE%E5%BC%8Fi-%3Dj%2A%3Dx%2By%E7%9A%84%E5%80%BC%E4%B8%8D%E6%98%AF-34.5%E8%80%8C%E6%98%AF-34%3F%E5%A6%82%E6%9E%9C%E6%9C%89%E5%8F%96%E6%95%B4%E7%9A%84%E8%BF%90%E7%AE%97%E7%AC%A6%E5%8F%B7%2C%E9%82%A3%E4%B9%88%E6%98%AF%E5%93%AA%E4%B8%AA%E8%B5%B7%E5%88%B0%E4%BA%86%E5%8F%96%E6%95%B4%E7%9A%84%E4%BD%9C%E7%94%A8%3F%E8%BF%98%E6%9C%89%E5%93%AA%E4%BA%9B%E8%BF%90%E7%AE%97%E7%AC%A6%E6%9C%89%E5%8F%96%E6%95%B4%E4%BD%9C%E7%94%A8%3F)
为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?
为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?
如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?
为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?
不是运算符取整,之所以取整的原因是,类型转换!
数据类型的转换一般分为隐含转换和强制转换两种;
隐含转换
算术运算符 关系运算符 逻辑运算符赋值运算符等二元运算符要求两个运算符的类型一致,算术运算 关系运算中参与运算的类型不一致时要进行隐含转换,原则是将低类型转化成高类型(类型越高数据精度越高,double>float>unsigned long>long >int>short>char>)这种转化是电脑自动完成,是安全的,数据精度没有损失;
强制转换
一般涉及到将高类型转化成低类型时使用,不安全,可能在精度的损失,有两种方法
1类型说明符(表达式)//c++强制转化符号
2(类型说明符)表达式 //c强制转化符号;
如 float z=7.56;
int a;
a=int(z);或a=(int)z;
i-=j*=x+y表达式分解如下:
double tmp1 = (double)x + y;
j = int( (double)j * tmp1 ); // j =int( 5.0 *7.5) =37
i-=j; // i = 3 - 37 = -34;