我遇到了一個惱人的錯誤在我的代碼:爲什麼剩餘操作符會因不同的數據類型而失敗?
length = 60;
index = -1;
rem = index % length;
在調試器中,我看到了rem
,而不是-1,這沒有任何意義,我值15。原來,length
類型爲unsigned int和index
類型爲int。更改length
的類型爲int解決了該問題。
但是,我不明白哪裏出了問題。鑑於剩餘操作的定義((a/b)*b + a%b == a
),我可能預期由於不同的類型而出現符號錯誤,但我沒有預料到隨機值爲15.(儘管60/4 = 15,所以也許有些位被移位了? )
我的問題是:爲什麼剩餘操作在作爲操作數提供帶符號和無符號整數時失敗?哪些實現細節會導致這種情況?
(使用GCC 4.8.2)
@nos:重新開放。隨意張貼,作爲答案。 –