什么是向上取整和向下取整,向上取整和向下取整是什么意思

转自:http://blog.sina.com.cn/s/blog_a3137f350100zxy7.html

向下取整的运算称为Floor,用数学符号⌊⌋表示;向上取整的运算称为Ceiling,用数学符号⌈⌉表示。例如:

⌊59/60⌋=0
⌈59/60⌉=1
⌊-59/60⌋=-1
⌈-59/60⌉=0

  在C语言中整数除法取的既不是Floor也不是Ceiling,无论操作数是正是负总是把小数部分截掉,在数轴上向零的方向取整(Truncate toward Zero),或者说当操作数为正的时候相当于Floor,当操作数为负的时候相当于Ceiling。

习题

  假设变量x和n是两个正整数,我们知道x/n这个表达式的结果要取Floor,例如x是17,n是4,则结果是4。如果希望结果取Ceiling应该怎么写表达式呢?例如x是17,n是4,则结果是5;x是16,n是4,则结果是4。

习题的大意是如果X除N能除断,则结果为余数,如果X不能除断,则结果为余数加1。

INT函数   将数字向下舍入到最接近的整数,即取不大于自变量的最大整数,
例如:int[6.4]=6 int[-9.7]= -10
语法
INT(number)
Number 需要进行向下舍入取整的实数。
示例
  如果将示例复制到空白工作表中,可能会更易于理解该示例。    ​ A 1 数据 2 19.5 公式 说明(结果) =INT8.9) 将8.9向下舍入到最接近的整数8) =INT-8.9) 将-8.9向下舍入到最接近的整数-9) =A2-INTA2) 返回单元格A2中正实数的小数部分0.5) 类型标识符    C/C++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同,在但是 32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。

网上搜索到结果为如下:

1、
ifx%n)>0){result =x/n+1;}
else{result=x/n;}

2、
x+n-1)/n);

3、
int)float)x/float)n)+0.9))

下面给出证明:

1. 设x=kn,k为整数,即x为n的整数倍。则(x+n-1)/n=kn+n-1)/n=k+1)n-1)/n,此时分子没有达到n的k+1倍,但大于等于n的k倍, 默认计算取下整则为k。符合要求。 2.设x=kn+m,k为整数,m为整数且0<m<n。则(x+n-1)/n=kn+m+n-1)/n=k+1)n+m-1)/n。此时分子的大于等于k+1)n,小于k+2)n, 按照默认计算应该为k+1。符合要求。   向上取整和向下取整的代码实例: #include <math.h> #include <stdio.h> void main void ) { double y; y = floor 2.8 ); printf “The floor of 2.8 is %f\n”, y ); y = floor -2.8 ); printf “The floor of -2.8 is %f\n”, y ); y = ceil 2.8 ); printf “The ceil of 2.8 is %f\n”, y ); y = ceil -2.8 ); printf “The ceil of -2.8 is %f\n”, y ); }

Output The floor of 2.8 is 2.000000 // 地板,就是取低 The floor of -2.8 is -3.000000 // 地板,就是取低,-3 比 -2.8 低 The ceil of 2.8 is 3.000000 // 天花板,就是取高 The ceil of -2.8 is -2.000000 // 天花板,就是取高,-2 比 -2.8高
  Word->插入->符号,在字体中选择Lucida Sans Unicode 子集选择数学运算符 就能找到向上、向下取整符号该习题解答如下:
#include <stdio.h>int main){ int x,n; printf”请输入数字:x n\n”); scanf”%d %d”,&x,&n); printf”x/n 向上取整的结果:%d\n”,x+n-1)/n); return 0;}


linux 系统下编译此程序步骤:
将这个程序保存成main.c,然后编译执行:
$ gcc main.c
$ ./a.out
gcc是Linux平台的C编译器,编译后在当前目录下生成可执行文件a.out,直接在命令行输入这个可执行文件的路径就可以执行它。如果不想把文件名叫a.out,可以用gcc的-o参数自己指定文件名:
 $ gcc main.c -o main<br style="font-一分快三大小单双技巧整数倍。则(x+n-1)/n=kn+n-1)/n=k+1)n-1)/n,此时分子没有达到n的k+1倍,但大于等于n的k倍, 默认计算取下整则为k。符合要求。 2.设x=kn+m,k为整数,m为整数且0<m<n。则(x+n-1)/n=kn+m+n-1)/n=k+1)n+m-1)/n。此时分子的大于等于k+1)n,小于k+2)n, 按照默认计算应该为k+1。符合要求。   向上取整和向下取整的代码实例: #include <math.h> #include <stdio.h> void main void ) { double y; y = floor 2.8 ); printf "The floor of 2.8 is %f\n", y ); y = floor -2.8 ); printf "The floor of -2.8 is %f\n", y ); y = ceil 2.8 ); printf "The ceil of 2.8 is %f\n", y ); y = ceil -2.8 ); printf "The ceil of -2.8 is %f\n", y ); }

Output The floor of 2.8 is 2.000000 // 地板,就是取低 The floor of -2.8 is -3.000000 // 地板,就是取低,-3 比 -2.8 低 The ceil of 2.8 is 3.000000 // 天花板,就是取高 The ceil of -2.8 is -2.000000 // 天花板,就是取高,-2 比 -2.8高
  Word->插入->符号,在字体中选择Lucida Sans Unicode 子集选择数学运算符 就能找到向上、向下取整符号该习题解答如下:
#include <stdio.h>int main){ int x,n; printf”请输入数字:x n\n”); scanf”%d %d”,&x,&n); printf”x/n 向上取整的结果:%d\n”,x+n-1)/n); return 0;}


linux 系统下编译此程序步骤:
将这个程序保存成main.c,然后编译执行:
$ gcc main.c
$ ./a.out
gcc是Linux平台的C编译器,编译后在当前目录下生成可执行文件a.out,直接在命令行输入这个可执行文件的路径就可以执行它。如果不想把文件名叫a.out,可以用gcc的-o参数自己指定文件名:
 $ gcc main.c -o main
 $ ./main

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注