一、c语言向上取整和向下取整?
直接赋值给整数变量 int i = 2.5; 或 i = (int) 2.5; 这种方法采用的是舍去小数部分。
C/C++中的整数除法运算符"/"本身就有取整功能(int / int),而下面介绍的取整函数返回值是double。整数除法对正数的取整是舍去小数部分,但是整数除法对负数的取整结果和使用的C编译器有关。 使用floor函数,向下取整。floor(x)返回的是x的整数部分。如: floor(2.5) = 2 floor(-2.5) = -3
二、C中怎么在运算中强制将浮点型转换成整型?
C语言有以下几种取整方法:
1、直接赋值给整数变量。如:inti=2.5;或i=(int)2.5;这种方法采用的是舍去小数部分,能用于你的问题。
2、C/C++中的整数除法运算符“/”本身就有取整功能(int/int),而下面介绍的取整函数返回值是double。整数除法对正数的取整是舍去小数部分,能用于你的问题。不过整数除法对负数的取整结果和使用的C编译器有关。
3、使用floor函数。floor(x)返回的是小于或等于x的最大整数。如:floor(2.5)=2floor(-2.5)=-34、使用ceil函数。ceil(x)返回的是大于x的最小整数。如:ceil(2.5)=3ceil(-2.5)=-2floor()是向负无穷大舍入,floor(-2.5)=-3;ceil()是向正无穷大舍入,ceil(-2.5)=-2。floor函数能用于你的问题。5、intb=(int)a;//取整intc=(int)(a+0.5);//四舍五入
三、C语言如何把整型转换成浮点数?
在这里,和 float 使用什么表示法或者精度没有关系。只是 32 位整型表达不了 1e10,前者是 cvttss2si,后者是整型(不是浮点数)截断,怎么做,就看编译器发挥了。
如果转换的结果大于最大有符号双字整数,则触发浮点无效异常;如果设置此异常的掩码,
则返回0x80000000
0x80000000 有符号 32 位整型就是 -2147483648。
这里随便找个大于 int32 表示范围的浮点数,都是这个结果
这个 1410065408 源自
float -> int,1e10f -> 10000000000
10000000000 -> 二进制表示 1001010100000010111110010000000000
int 只有 32 位 -> 截断后 32 位
剩下 01010100000010111110010000000000
01010100000010111110010000000000 -> 十进制 1410065408
不同编译器编出行为不一样。
四、C语言向零取整原则的含义?
标准规定的,整数类型的除法结果是整数,向0的方向取整 -3/4=-0.75,往0的方向第一个整数就是0,所以取0 C早期并不是这样做的,那时候这个行为是implementation defined,后面在C99才确定下来 其他语言也不一定是这样,比如Python就规定向负无穷的方向取整