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
應用在資料庫分庫分表
關於論壇資料庫的設計(分表分庫等-轉)
資料庫分庫分表(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張表。