2013-04-14 27 views
-1

在閱讀完Should you always use 'int' for numbers in C, even if they are non-negative?的所有回答和評論後,我仍然不確定在以下情況下該怎麼做。帶有符號整數的模運算在c中未定義的行爲?

兩個遠程設備正在計算各自位置的事件。他們定期向計算機報告計數器讀數,其中反饋算法以某種方式將計數器讀數的差異保持在範圍內。事件的順序是無窮無盡的,所以讀數以2^n爲模數報告。對於模運算,建議使用無符號整數。但是,這種差異很可能會變成負面的。在計算差異之前將讀數轉換爲有符號整數在我測試它的平臺上工作正常(即,我得到的差值模數2^n的數值小)。將讀數聲明爲已經在接口中已經簽名,可以得到優雅的代碼。但是,代碼應該是可移植的。我可以帶大使嗎?警告嚴重嗎?

+0

需要考慮的一個選項:如果計數器的值是16位無符號數,則可以將它們讀取爲32位有符號數。或者如果他們是32位的,你可以將它們讀入64位數字。然後定義差異,負數將爲負數等。 –

+0

@JonathanLeffler底片將爲負數,但其模塊化殘基將保持不確定狀態。 –

+0

@JonathanLeffler:謝謝你的想法。似乎比基於分支的解決方案更快,更清晰。 – Rainald62

回答

2

我可以帶U.B。警告嚴重嗎?

如果你不想讓你的編譯器或CPU玩弄你,你的代碼應該是無UB的。

相關問題