天天看點

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

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張表。

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

 ​