詳解負數取模運算
有人如果在python上使用%
運算,肯定會遇到這樣的問題,就是它在負數上的結果和我們之前在C或JAVA上的結果不一樣。比如: -6 % 5
這個運算,在python中的結果是4
,但是在C/JAVA上的結果是-1
這是為什麼呢?wiki百科的解釋很好,英文好的可以去看看,這裡做一個簡單的搬運:
取模運算
所謂取模運算在數學上就是通過輾轉相除法得到的餘數,一般滿足下面這個式子:
所以,r = a - nq
,而q的計算曆史上出了2個分支:
truncate
這派的思想很簡單,就是截去小數部分。
比如3/2 = 1 , -3/2 = -1
簡單,粗暴。
floor
floor是Donald Knuth
比如:3/2 = 1 -3/2 = -2
其他
當然還有其他的一些人提出的一些別的方案,但是都大同小異,有些要確保r為正,有些在正數和負數的時候做不同的操作……
運用
C
C還有JAVA使用的truncate的方法,所以在計算-6 % 5 的時候是這麼算的:
-6 - (5*trunc(-6/5))= -6 - (5 * -1) = -1
python
python使用的floor除法的方式
-6 - (5*floor (-6/5))= -6 - (5 * -2) = 4
結論
反正,在取模運算上,基本不同的語言都有自己的一套機制,一般來說,這套機制在正數上都一樣,所以為了避免出現不必要的問題,建議先把負數轉成正數再做取模運算。
相關推薦
詳解負數取模運算
有人如果在python上使用%運算,肯定會遇到這樣的問題,就是它在負數上的結果和我們之前在C或JAVA上的結果不一樣。比如: -6 % 5這個運算,在python中的結果是4,但是在C/JAVA上的結果是-1 這是為什麼呢?wiki百科的解釋很好,英文好的可以
The mod(%) operation 負數取模運算詳解
Please indicate the source if you want to reprint: http://blog.csdn.net/gaoxiangnumber1 If a and d a
負數取模運算
最近在學習運算子時,遇到了負數取模(求餘數)的問題。對於正數取模很簡單,但複數取模時,不同的計算器卻有不同的答案。在網上看了一篇文件感覺總結的很詳盡和大家共享 源地址:https://ceeji.net/blog/mod-in-real/ 背景 最近在一道 Java 習題中
java中對負數取模運算
例: System.out.println(-2%5);//-2 System.out.println(2%-5);//2 System.out.println(-2%-5);//-2 Syst
負數取模運算問題
今天做一個筆試題,遇到了負數取模運算,做一個總結。 我們平常遇到的除法取餘,很少涉及負數。 那麼對於負數取餘,一共只有三種情況。 12%(-5)=2 因為商是-2,所以餘數是 2 (-12)%(-5)=-2 因為商是2,所以餘數是 -2 (-12)%5 = -2 因為商
Java%(取模運算)詳解
一.Java的取模運算 1.實現演算法 public static double ramainder(double dividend, double dividor) { return dividend - dividend / divi
分數的乘法逆元和負數的取模運算
好的 分數 多少 研究 法則 表達 求余 推導 模運算 1.乘法逆元 A.定義 如果ax≡1 (mod p),且gcd(a,p)=1(a與p互質),則稱a關於模p的乘法逆元為x。 既然有ax≡1 (mod p),那麽有ax - py = 1,x是a關於模p的乘法逆元
計算機系統 二進位制原碼 補碼 反碼 詳解 JAVA 二進位制位運算(位與 位或 位取反 位異或 左移 右移)
在計算機系統中,數值一律使用補碼來表示和儲存。在探求為何計算機要使用補碼之前, 讓我們先了解原碼, 反碼和補碼的概念。 對於一個數, 計算機要使用一定的編碼方式進行儲存。 原碼, 反碼, 補碼是計算機儲存一個具體數字的編碼方式。 一個數在計算機中的二
負數的取模運算
我們知道,在不同的語言中,對負數執行取模運算,結果有可能會是不同的。例如,(-11)%5在python中計算的結果是4,而在C(C99)中計算的結果則是-1。 truncate除法 && floor除法 在大多數程式語言中,如果整數a不是整數b的整數倍
取模運算
add 結合 重要 nbsp left 但是 list padding 四則運算 腦子不好使,老是記不住(?_?),備忘一下。 模運算與基本四則運算有些相似,但是除法例外。其規則如下: (a + b) % p = (a % p + b % p) % p (a -
詳解npm的模塊安裝機制
追加 all 這樣的 2.0 https alt png wid 解釋 詳解npm的模塊安裝機制 依賴樹表面的邏輯結構與依賴樹真實的物理結構 依賴樹表面的邏輯結構與依賴樹真實的物理結構並不一定相同! 這裏要先提到兩個命令:tree -d(linux)和npm ls(npm)
Fidder詳解-抓取HTTPS清求(Web/App)抓包分析(靠譜篇)
可能 clas 請求 設置代理 cer port 關閉 lan str 為什麽要學Fidder抓包? 學習接口,必須要學http協議,不要求您對協議的掌握有多深。只是希望你能夠了解什麽是協議、協議的報文、狀態碼等等!本文通過抓包工具Fidder帶你進入接口的大門。我們通過
Python 正則表達式詳解與 re 模塊的使用
1.3 個數 介紹 date 點號 name 檢查 模塊 大小寫 強烈推薦正則表達式在線測試網站: https://regex101.com/ 1. 標準庫模塊 re 更多詳情參考官方文檔: https://docs.python.org/3/howto/rege
Hibernate(四) - HQL_QBC查詢詳解--抓取策略優化機制
load i++ lec for 簡單的 測試類 domain 字符 main.c Hibernate 的查詢方式 在 Hibernate 中提供了很多種的查詢的方式。Hibernate 共提供了五種查詢方式。 1、Hibernate 的查詢方式:OID 查詢 OI
Hdu 1395 2^x mod n = 1 取模運算
Problem Description Give a number n, find the minimum x(x>0) that satisfies 2^x mod n = 1. Input One positive integer on ea
取模運算和取餘運算
對於整型數a,b來說,取模運算或者求餘運算的方法都是: 1.求整數商: c = a/b; 2.計算模或者餘數: r = a - c*b. 求模運算和求餘運算在第一步不同: 取餘運算在取c的值時,向0方向舍入(fix()函式);而取模運算在計算c的值時,向-∞方向舍入(f
【Hibernate(四)】HQL_QBC查詢詳解——抓取策略優化機制
1.2 Hibernate的查詢的方式 Hibernate共提供了五種查詢方式。 1.2.1 Hibernate的查詢方式:OID查詢 OID檢索:Hibernate根據物件的OID(主鍵)進行檢索 1.2.1.1 使用get方法 Customer customer
給定A, B兩個整數,不使用除法和取模運算,求A/B的商和餘數
第一種辦法: 從小到大遍歷 for(i = 2 to A - 1) if(i * B > A) 商 = i- 1, 餘 = A - (i -1) * B 第二種辦法 二分法,在[2, A]中查詢滿足的解 第三種辦法 以除數為初始測試值,以2的指數
關於取模運算(mod)和求餘(rem)運算
通常情況下取模運算(mod)和求餘(rem)運算被混為一談,因為在大多數的程式語言裡,都用’%’符號表示取模或者求餘運算。在這裡要提醒大家要十分注意當前環境下’%’運算子的具體意義,因為在有負數存在的情況下,兩者的結果是不一樣的。 對於整型數a,b來說,取模運算或者求餘運算的方法都是: 
java 中負數取模
正數取模運算相信很多人都很熟練,但是有時候會涉及到負數的取模,比如說面試。今天就來看看負數參與的取模應該怎麼整。 2%(-5)結果應該是什麼呢? 5%(-2)結果又應該是什麼呢? 結論一:正數取模負數的結果和正數取模這個負數的絕對值的結果完全一樣。