任何人都有挑戰?我正在尋找一種有效的算法來實現用最大值修復的數字的換行/溢出行爲。基於最大值的算法來包裝/溢出數
說,最大可能數目的值被定義爲:
#define MAX_NUMBER_VALUE 100
和一個函數translate
,需要一個符號的32位或64位整數值和「迴繞到它」使用MAX_NUMBER_VALUE常數:
int_fast8_t translate(int_fast32_t value) {
if (abs(value) > MAX_NUMBER_VALUE) {
return ...; // This!
}
return value;
}
預期的輸入和輸出:
translate(55) => 55
translate(100) => 100
translate(101) => -100
translate(102) => -99
translate(200) => -1
translate(202) => 1
translate(300) => 99
translate(-40) => -40
translate(-100) => -100
translate(-101) => 100
translate(-102) => 99
translate(-200) => 1
translate(-201) => 0
...
數值圍繞數字「行走」,好像它是一個圓形的行星。這看起來類似於C/C++如何處理int溢出條件。我想知道是否有一種快速有效的方法來實現這種包裝?與位移或其他按位操作一樣?
你剛剛描述'%'運算符嗎? –
你基本上需要做一個超過MAX_NUMBER_VALUE * 2 - 1的模... – Mysticial