unsigned整數相減溢位問題

2021-09-29 00:12:08 字數 510 閱讀 3600

平時工作中接觸到的整數都是無符號整數,很少有整數溢位的業務場景,最近遇到個整數溢位問題,故專門寫篇blog記錄下,本文不會**整數溢位背後的原理,是一篇總結溢位規律的文章,以4位元組整數為例,**下unsigned整數相減溢位問題。

直接擼**:)

#include int main()

執行結果如下:

a=0,b=fffffffe,a-b=2

a=ffffffff,b=fffffff8,a-b=7

a=ffffffff,b=fffffffe,a-b=1

不管a,b值為多少,a-b=(a-b)%0xffffffff

只有a,b的實際差值小於0xffffffff時,a-b的值才正確,如果a,b的差值不超過0xffffffff,就算a,b本身值溢位,a-b仍能得到正確值。

當a,b的實際差值大於0xffffffff時,a-b的值並不是實際的差值,這種場景應該被重視,在實際業務場景下會出邏輯問題。

大整數相減

include include include includechar bigintminus const char numstr1,const char numstr2 else if len1 len2 else else int tmpbigger resultlen int tmpsmall...

無符號數相減溢位

u16 a 190 u16 b 1020 u16 c 0 c a b c 0xfcc2 微控制器採用補碼運算,需要程式設計師認為識別是有符號數還是無符號數。通過最高bit判斷。相差不大取上一次的值 if fluor value 100x backup fluor value 100x 用減法處理會有...

整數溢位,如何判斷整數溢位

c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...