2021年8月13日 星期五

Saturation arithmetic

static inline uint32_t saturated_addu32(uint32_t x, uint32_t y)
{
        uint32_t sum = x + y;
        sum |= -(sum < x);
        return sum;
}

非負整數相加,結果變小時 OR -1,否則 OR 0,不用判斷式。

static inline uint32_t saturated_subu32(uint32_t x, uint32_t y)
{
        uint32_t z = x - y;
        z &= -(z <= x);
        return z;
}

非負整數相減,結果變大時 AND 0 成為 0,否則 AND -1 不變,不用判斷式。

https://en.wikipedia.org/wiki/Saturation_arithmetic

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...