java 取模運算% 實則取餘 簡述 例子 應用在資料庫分庫分表

weixin_34126215發表於2015-01-05

java 取模運算%  實則取餘 簡述 例子 應用在資料庫分庫分表

取模運算

求模運算與求餘運算不同。“模”是“Mod”的音譯,模運算多應用於程式編寫中。 Mod的含義為求餘。模運算在數論和程式設計中都有著廣泛的應用,從奇偶數的判別到素數的判別,從模冪運算到最大公約數的求法,從孫子問題到凱撒密碼問題,無不充斥著模運算的身影。雖然很多數論教材上對模運算都有一定的介紹,但多數都是以純理論為主,對於模運算在程式設計中的應用涉及不多。

取餘運算區別

對於整型數a,b來說,取模運算或者求餘運算的方法都是:
1.求 整數商: c = a/b;
2.計算模或者餘數: r = a - c*b.
求模運算和求餘運算在第一步不同: 取餘運算在取c的值時,向0 方向舍入(fix()函式);而取模運算在計算c的值時,向負無窮方向舍入(floor()函式)。
例如:計算-7 Mod 4
那麼:a = -7;b = 4;
第一步:求整數商c,如進行求模運算c = -2(向負無窮方向舍入),求餘c = -1(向0方向舍入);
第二步:計算模和餘數的公式相同,但因c的值不同,求模時r = 1,求餘時r = -3。
歸納:當a和b符號一致時,求模運算和求餘運算所得的c的值一致,因此結果一致。
當符號不一致時,結果不一樣。求模運算結果的符號和b一致,求餘運算結果的符號和a一致。
另外各個環境下%運算子的含義不同,比如c/c++,java 為取餘,而python則為取模。

java,取模運算(%)

理論:當使用隨機數生成器產生的結果時,取模運算(%)可將結果限制在上限為運算元最大值減1的範圍

解釋,例如:n是隨機數,那麼n%10就是0~9中的一個數。無論n是多大的數,n%10只能是0~9之間的一個數,其中10就是運算元。

 

JAVA取模,取餘問題

5/2=2 5%2=1對了吧????那下面的該怎麼算?? 2/5=? 2%5=?

第一個是0 第二個是2 如果不做型別轉換的話結果去整數部分 所以第一個是0 第二個 0*5+2=2 所以是2

 

取模MOD和求餘REM……JAVA的%原來只是REM

 

 

應用在資料庫分庫分表

關於論壇資料庫的設計(分表分庫等-轉)

資料庫分庫分表(sharding)系列(五) 一種支援自由規劃無須資料遷移和修改路由程式碼的Sharding擴容方案

分庫分表舉個簡單的例子,場景mysql,目的是提高儲存量,注意:表命名規範,資料庫叢集規範,儲存查詢表名獲取排程程式(分了庫需要先切換到對應的資料庫源,再按計算出的表名去查詢)。

儲存查詢表名獲取排程程式原理:

分表,水平切分。比如分256張表,事先建立好user_tab0~user_tab255此命名等256張表,根據user_id取模,user_id%256=[0~255],依據取模後的值調配儲存到對應的user_tab[模值] 中。

分庫,垂直切分,可以事先建立好user_db[0~19]_tab[0~255]這樣命名規範的表,這個例子代表分20個庫到每個庫中的256張表。

 

相關文章