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