最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言取模取整的深入理解

 更新時(shí)間:2022年01月18日 10:47:47   作者:三分苦  
本文主要介紹了?C語(yǔ)言取模取整的深入理解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一:四大取整  

1.1、 0向取整

看代碼:

#include <stdio.h>
int main()
{
	//本質(zhì)是向0取整
	int i = -2.9;
	int j = 2.9;
	printf("%d\n", i); //結(jié)果是:-2
	printf("%d\n", j); //結(jié)果是:2
    printf("%d %d\n", 5 / 2, -5 / 2);  // 2 -2
	return 0;
}

C中默認(rèn)0向取整,畫(huà)圖解釋0向取整:

 C語(yǔ)言當(dāng)中有一個(gè)trunc函數(shù),運(yùn)用的也是0向取整。注意引用頭文件#include<math.h>.示例如下:

#include <stdio.h>
#include<math.h>
int main()
{
	int i = -2.9;
	int j = 2.9;
	printf("%d\n", i); //結(jié)果是:-2
	printf("%d\n", j); //結(jié)果是:2
	printf("%d\n", (int)trunc(2.9)); //結(jié)果是:2 //結(jié)果是:-2
	printf("%d\n", (int)trunc(-2.9));//結(jié)果是:-2
	return 0;
}

1.2、  -∞取整( 地板取整)

其實(shí)運(yùn)用的是floor函數(shù),跟上述trunc一樣引用#include<math.h>

看代碼:

#include<stdio.h>
#include<math.h>
int main()
{
	printf("%.1f\n", floor(-2.9)); // -3.0
	printf("%.1f\n", floor(-2.1)); // -3.0
	printf("%.1f\n", floor(2.9));  // 2.0
	printf("%.1f\n", floor(2.1));  // 2.0
	return 0;
}

畫(huà)圖解釋-∞取整

1.3、 +∞取整

運(yùn)用的是ceil函數(shù),同樣需要#include<math.h>

看代碼:

#include<stdio.h>
#include<math.h>
int main()
{
	printf("%.1f\n", ceil(-2.9));  // -2.0
	printf("%.1f\n", ceil(-2.1));  // -2.0
	printf("%.1f\n", ceil(2.9));   // 3.0
	printf("%.1f\n", ceil(2.1));   // 3.0
	return 0;
}

畫(huà)圖解釋+∞取整:

1.4、 四舍五入取整

運(yùn)用的是round函數(shù),同樣需要#include<math.h>

看代碼:

#include<stdio.h>
#include<math.h>
int main()
{
	printf("%.1f\n", round(-2.9)); // -3.0
	printf("%.1f\n", round(-2.1)); // -2.0
	printf("%.1f\n", round(2.9));  // 3.0
	printf("%.1f\n", round(2.1));  // 2.0
}

1.5、 例子匯總

#include <stdio.h>
#include <math.h>
int main()
{
	const char* format = "%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n";
	printf("value\tround\tfloor\tceil\ttrunc\n");
	printf("-----\t-----\t-----\t----\t-----\n");
	printf(format, 2.3, round(2.3), floor(2.3), ceil(2.3), trunc(2.3));
	printf(format, 3.8, round(3.8), floor(3.8), ceil(3.8), trunc(3.8));
	printf(format, 5.5, round(5.5), floor(5.5), ceil(5.5), trunc(5.5));
	printf(format, -2.3, round(-2.3), floor(-2.3), ceil(-2.3), trunc(-2.3));
	printf(format, -3.8, round(-3.8), floor(-3.8), ceil(-3.8), trunc(-3.8));
	printf(format, -5.5, round(-5.5), floor(-5.5), ceil(-5.5), trunc(-5.5));
	return 0;
}

 結(jié)論:

浮點(diǎn)數(shù)(整數(shù)/整數(shù)),是有很多的取整方式的。

二:取模 / 取余

2.1、 概念

如果a和d是兩個(gè)自然數(shù),d非零,可以證明存在兩個(gè)唯一的整數(shù) q 和 r,滿足 a = q*d + r 且0 ≤ r < d。其中,q 被稱(chēng)為商,r 被稱(chēng)為余數(shù)。

2.2、 示例(C和Python)

#include <stdio.h>
int main()
{
	int a = 10;
	int d = 3;
	printf("%d\n", a % d); //結(jié)果是1
	//因?yàn)椋篴=10,d=3,q=3,r=1 0<=r<d(3)
	//所以:a = q*d+r -> 10=3*3+1
 
	int m = -10;
	int n = 3;
	printf("%d\n", m / n); //C語(yǔ)言中是-3,很好理解
	printf("%d\n", m % n); //C語(yǔ)言是-1
 
	return 0;
}

C語(yǔ)言中,我們對(duì)-10/3=-3以及-10%3=-1很好理解,沒(méi)有爭(zhēng)議

而在Python中,-10/3竟然=-4,而-10%3竟然=2

為什么呢?

結(jié)論:很顯然,上面關(guān)于取模的定義,并不能滿足語(yǔ)言上的取模運(yùn)算

解析:

因?yàn)樵贑中,現(xiàn)在-10%3出現(xiàn)了負(fù)數(shù),根據(jù)定義:滿足 a = q*d + r 且0 ≤ r < d,C語(yǔ)言中的余數(shù),是不滿足定義的, 因?yàn)椋瑀<0了。

故,大家對(duì)取模有了一個(gè)修訂版的定義: 如果a和d是兩個(gè)自然數(shù),d非零,可以證明存在兩個(gè)唯一的整數(shù) q 和 r,滿足 a = q*d + r , q 為整數(shù),且0 ≤ |r| < |d|。其中,q 被稱(chēng)為商,r 被稱(chēng)為余數(shù)。

有了這個(gè)新的定義,那么C中或者Python中的“取模”,就都能解釋了。

解釋C: -10 = (-3) * 3 + (-1)

解釋Python:-10 = (?)* 3 + 2,其中,可以推到出來(lái),'?'必須是-4(后面驗(yàn)證).即-10 = (-4)* 3 + 2,才能 滿足定義。

所以,在不同語(yǔ)言,同一個(gè)計(jì)算表達(dá)式,負(fù)數(shù)“取模”結(jié)果是不同的。我們可以稱(chēng)之為分別叫做正余數(shù) 和 負(fù)余數(shù)

是什么決定了這種現(xiàn)象?

由上面的例子可以看出,具體余數(shù)r的大小,本質(zhì)是取決于商q的。

而商,又取決誰(shuí)呢?取決于除法計(jì)算的時(shí)候,取整規(guī)則。

2.3、 取余和取模一樣嗎?

細(xì)心的同學(xué),應(yīng)該看到了,我上面的取模都是帶著""的。說(shuō)明這兩個(gè)并不能?chē)?yán)格等價(jià)(雖然大部分情況差不多) 取余或者取模,都應(yīng)該要算出商,然后才能得出余數(shù)。

本質(zhì) 1 取整:

取余:盡可能讓商,進(jìn)行向0取整。

取模:盡可能讓商,向-∞方向取整。

故:

C中%,本質(zhì)其實(shí)是取余。

Python中%,本質(zhì)其實(shí)是取模。

理解鏈:

對(duì)任何一個(gè)大于0的數(shù),對(duì)其進(jìn)行0向取整和-∞取整,取整方向是一致的。故取模等價(jià)于取余 對(duì)任何一個(gè)小于0的數(shù),對(duì)其進(jìn)行0向取整和-∞取整,取整方向是相反的。故取模不等價(jià)于取余

同符號(hào)數(shù)據(jù)相除,得到的商,一定是正數(shù)(正數(shù)vs正整數(shù)),即大于0! 故,在對(duì)其商進(jìn)行取整的時(shí)候,取模等價(jià)于取余。

本質(zhì) 2 符號(hào):

參與取余的兩個(gè)數(shù)據(jù),如果同符號(hào),取模等價(jià)于取余

2.4、 計(jì)算數(shù)據(jù)同符號(hào)

看代碼:

#include <stdio.h>
int main()
{
	printf("%d\n", 10 / 3);  // 3
	printf("%d\n\n", 10 % 3);// 1
	printf("%d\n", -10 / -3); // 3
	printf("%d\n\n", -10 % -3); // -1
	return 0;
}

在Python中,我們發(fā)現(xiàn)運(yùn)行結(jié)果和上述一樣。

結(jié)論:通過(guò)對(duì)比試驗(yàn),更加驗(yàn)證了,參與取余的兩個(gè)數(shù)據(jù),如果同符號(hào),取模等價(jià)于取余

2.5、 計(jì)算數(shù)據(jù)不同符號(hào)

看代碼:

#include <stdio.h>
int main()
{
	printf("%d\n", -10 / 3); //結(jié)果:-3
	printf("%d\n\n", -10 % 3); //結(jié)果:-1 為什么? -10=(-3)*3+(-1)
	printf("%d\n", 10 / -3); //結(jié)果:-3
	printf("%d\n\n", 10 % -3); //結(jié)果:1 為什么?10=(-3)*(-3)+1
	return 0;
}

而在Python中,結(jié)果卻不是這樣的。

明顯結(jié)論:如果不同符號(hào),余數(shù)的求法,參考之前定義。而余數(shù)符號(hào),與被除數(shù)相同。

為什么呢?

重新看看定義:如果a和d是兩個(gè)自然數(shù),d非零,可以證明存在兩個(gè)唯一的整數(shù) q 和 r,滿足 a = q*d + r , q 為整數(shù),且0 ≤ |r| < |d|。其中,q 被稱(chēng)為商,r 被稱(chēng)為余數(shù)

a = q*d + r 變換成 r = a - q*d 變換成 r = a + (-q*d)

對(duì)于:x = y + z,這樣的表達(dá)式,x的符號(hào) 與 |y|、|z|中大的數(shù)據(jù)一致

而r = a + (-q*d)中,|a| 和 |-q*d|的絕對(duì)值誰(shuí)大,取決于商q的取整方式。

c是向0取整的,也就是q本身的絕對(duì)值是減小的。如:

-10/3=-3.333.33 向0取整 -3. a=-10 |10|, -q*d=-(-3)*3=9 |9|

10/-3=-3.333.33 向0取整 -3. a=10 |10|, -q*d=-(-3)*(-3)=-9 |9|

絕對(duì)值都變小了

python是向-∞取整的,也就是q本身的絕對(duì)值是增大的。

-10/3=-3.333.33 '//'向-∞取整 -4. a=-10 |10|, -q*d=-(-4)*3=12 |12|

10/-3=--3.333.33 '//'向-∞取整 -4. a=10 |10|, -q*d=-(-4)*(-3)=-12 |12|

絕對(duì)值都變大了

結(jié)論:如果參與取余的兩個(gè)數(shù)據(jù)符號(hào)不同,在C語(yǔ)言中(或者其他采用向0取整的語(yǔ)言如:C++,Java),余數(shù)符號(hào),與被除數(shù) 相同。

2.6、 總結(jié)

(1)浮點(diǎn)數(shù)(或者整數(shù)相除),是有很多的取整方式的。

(2)如果a和d是兩個(gè)自然數(shù),d非零,可以證明存在兩個(gè)唯一的整數(shù) q 和 r,滿足 a = q*d + r , q 為整數(shù),且0 ≤ |r| < |d|。其中,q 被稱(chēng)為商,r 被稱(chēng)為余數(shù)。

(3)在不同語(yǔ)言,同一個(gè)計(jì)算表達(dá)式,“取模”結(jié)果是不同的。我們可以稱(chēng)之為分別叫做正余數(shù) 和 負(fù)余數(shù)

(4)具體余數(shù)r的大小,本質(zhì)是取決于商q的。而商,又取決于除法計(jì)算的時(shí)候,取整規(guī)則。

(5)取余vs取模: 取余盡可能讓商,進(jìn)行向0取整。取模盡可能讓商,向-∞方向取整。

(6)參與取余的兩個(gè)數(shù)據(jù),如果同符號(hào),取模等價(jià)于取余

(7)如果參與取余的兩個(gè)數(shù)據(jù)符號(hào)不同,在C語(yǔ)言中(或者其他采用向0取整的語(yǔ)言如:         C++,Java),余數(shù)符號(hào),與被 除數(shù)相同。(因?yàn)椴捎玫南?取整)

 到此這篇關(guān)于C語(yǔ)言取模取整的深入理解的文章就介紹到這了,更多相關(guān)C語(yǔ)言取模取整 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt 儀表盤(pán)的實(shí)現(xiàn)示例

    Qt 儀表盤(pán)的實(shí)現(xiàn)示例

    儀表盤(pán)在很多汽車(chē)和物聯(lián)網(wǎng)相關(guān)的系統(tǒng)中很常用,本文就來(lái)介紹一下Qt 儀表盤(pán)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C++反轉(zhuǎn)字符串中單詞的字符順序的兩種方法

    C++反轉(zhuǎn)字符串中單詞的字符順序的兩種方法

    在處理字符串相關(guān)的問(wèn)題時(shí),反轉(zhuǎn)字符串中每個(gè)單詞的字符順序是一個(gè)常見(jiàn)的任務(wù),同時(shí)要保證空格和單詞的初始順序不變,下面我們將詳細(xì)介紹兩種解決該問(wèn)題的方法,包括其解題思路和具體實(shí)現(xiàn)細(xì)節(jié),需要的朋友可以參考下
    2025-03-03
  • c++與python實(shí)現(xiàn)二分查找的原理及實(shí)現(xiàn)

    c++與python實(shí)現(xiàn)二分查找的原理及實(shí)現(xiàn)

    本文介紹了c++與python實(shí)現(xiàn)二分查找的原理及實(shí)現(xiàn),二分查找指首先將數(shù)組中間值和目標(biāo)值進(jìn)行比較,如果相等則返回;如果不相等,則選擇中間值左邊的一半或者右邊的一半進(jìn)行比較;不斷重復(fù)直到檢索完畢,下文相關(guān)資料需要的朋友可以參考一下
    2022-03-03
  • C語(yǔ)言讀取BMP圖像數(shù)據(jù)的源碼

    C語(yǔ)言讀取BMP圖像數(shù)據(jù)的源碼

    這篇文章主要介紹了C語(yǔ)言讀取BMP圖像數(shù)據(jù)的源碼,需要的朋友可以參考下
    2013-03-03
  • C語(yǔ)言的進(jìn)制轉(zhuǎn)換及算法實(shí)現(xiàn)教程

    C語(yǔ)言的進(jìn)制轉(zhuǎn)換及算法實(shí)現(xiàn)教程

    這篇文章主要介紹了C語(yǔ)言的進(jìn)制轉(zhuǎn)換及算法實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語(yǔ)言實(shí)現(xiàn)三子棋游戲附注釋

    C語(yǔ)言實(shí)現(xiàn)三子棋游戲附注釋

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋游戲附注釋?zhuān)闹惺纠a介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • c++ 完備的運(yùn)行時(shí)類(lèi)型信息(動(dòng)態(tài)類(lèi)型信息)

    c++ 完備的運(yùn)行時(shí)類(lèi)型信息(動(dòng)態(tài)類(lèi)型信息)

    這篇文章主要介紹了c++ 完備的運(yùn)行時(shí)類(lèi)型信息,需要的朋友可以參考下
    2017-07-07
  • C++面試八股文之什么是構(gòu)造函數(shù)

    C++面試八股文之什么是構(gòu)造函數(shù)

    構(gòu)造函數(shù)是一種特殊的成員函數(shù),用于創(chuàng)建和初始化類(lèi)的對(duì)象,這篇文章主要為大家詳細(xì)介紹了C++中構(gòu)造函數(shù)的相關(guān)知識(shí)點(diǎn),需要的可以參考一下
    2023-06-06
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存管理深入探討

    C語(yǔ)言動(dòng)態(tài)內(nèi)存管理深入探討

    動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語(yǔ)言中動(dòng)態(tài)內(nèi)存的管理
    2022-06-06
  • C語(yǔ)言實(shí)現(xiàn)推箱子項(xiàng)目

    C語(yǔ)言實(shí)現(xiàn)推箱子項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)推箱子項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08

最新評(píng)論

兴山县| 凌源市| 凌云县| 璧山县| 兴义市| 三江| 白水县| 荆州市| 湖口县| 沙洋县| 漾濞| 灵璧县| 沧源| 长垣县| 黄冈市| 英德市| 江华| 玛沁县| 舒兰市| 山东| 东丰县| 乌鲁木齐县| 蛟河市| 平利县| 军事| 江北区| 澄城县| 罗江县| 翁牛特旗| 黄浦区| 阿克| 乌恰县| 鄂托克旗| 固阳县| 旺苍县| 定南县| 南乐县| 赤水市| 抚宁县| 随州市| 沅江市|