C語言取整方法總結


C語言有下面幾種取整方法:

1.   直接賦值給整數變量

    int i = 3.5; 或 i = (int) 3.5;

    這樣的方法採用的是舍去小數部分。

2、整數除法運算符‘ / ’取整

    ‘ / ’本身就有取整功能(int / int),可是整數除法對負數的取整結果和使用的C編譯器有關。

3、使用floor函數

    floor(x)返回的是小於或等於x的最大整數

如:

    floor(3.5) = 3

    floor(-3.5) = -4

4、使用ceil函數

    ceil(x)返回的是大於x的最小整數。如:

    ceil(3.5) = 4

    ceil(-3.5) = -3

    floor()是向負無窮大舍入,floor(-3.5)  = -4。

    ceil()是向正無窮大舍入。ceil(-3.5)  = -3。

    可是在C里面ceil和floor()函數是返回double

5.向上取整方法

    在網上發現一個簡單的向上取整方法。

    這里我們用<>表示向上取整,[]表示向下取整,我們能夠證明:

    <N/M>= [(N-1)/M]+1    (0 < M <= N   M,N∈Z)

     不失一般性。我們設N = Mk+r (0 <= r < M,k∈Z),

(1)當r > 0時。

    左邊:<N/M> = <(Mk+r)/M >= <k+r/M>= k+<r/M> = k+1

    右邊:[(N-1)/M]+1 = [(Mk+r-1)/M]+1 = [k+(r-1)/M]+1 = k+1+[(r-1)/M]=k+1

(2)當r = 0時。

    左邊:<N/M> = k

    右邊:

    [(N-1)/M]+1 = [(Mk-1)/M]+1 = [(M(k-1)+M-1)/M]+1

    = [k-1+(M-1)/M]+1 = k+[(M-1)/M]

    = k

    綜上。命題得證。

    有了這個公式。我們在代碼里能夠這樣計算:

    int nn = (N-1)/M +1

    式中' / '是往下取整的。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM