我正在讀取一個24位值,目前變爲uint32_t
變量。計算兩個這樣的變量之間的差異,並思考「它是無符號的!爲什麼這會溢出一個問題?!」,我意識到這些值已經超出了包含它們的變量的大小。C無符號整數比較 - 環繞自定義位數
這是一個計數器,所以人們知道它比另一個'大',雖然可能溢出了。因此,0x1 - 0x2 = 0xFFFFFFFF
,但應該是0x00FFFFFF
。
我該怎麼處理這件事?
- 定義類型
uint24
; if
/else
在做適當的算術之前哪個更大;- 我還沒有想到的其他東西?
'最好'應該被解釋爲'最佳實踐'/'最可讀'/'最安全'。
1.您能否給您所遇到的問題的例子嗎?有輸入和預期結果。 2.你想減法的結果是有符號還是無符號的? – interjay
@interjay結果也是無符號的 - 這是一個計數器,所以一個是已知的更大;簽名的結果將毫無意義/ MSb浪費。 – OJFord
然後我沒有看到問題是什麼。如果從較大的數字中減去較小的數字,則不會發生溢出。 – interjay