對于某些 API 集成,我有一個操作,我需要添加兩個位元組并得到一個位元組作為結果。這是某種校驗和。現在本質上可能會發生溢位。
例如
byte a = 0xff
byte b = 0x01
byte results = a b;
是否有一個簡單的內置語法來避免溢位以轉移到下一個位元組,還是我必須自己做?例如減去完整位元組等等?沒有為此找到 API,我是不是忽略了什么?
uj5u.com熱心網友回復:
byte但是,當您添加s 時,結果是int,例如
byte a = 100;
byte b = 200;
var result = a b; // result == 300
由于a和b都在0..255范圍內,結果將在0..510范圍內并且不可能出現整數溢位。但是你想要byte result,這就是為什么你需要一個演員:
byte result = (byte) (a b);
在這里,.net 可以顯示兩種型別的反應:
- 檢查并拋出溢位例外
- 不檢查,而忽略溢位:
256 -> 0,257 -> 1等等。
我們想要第二個選擇,這就是為什么unchecked:
byte result = unchecked((byte) (a b));
uj5u.com熱心網友回復:
默認情況下,C# 不檢查整數溢位,因此這應該可以正常作業。
但是,如果專案啟用了積分溢位檢查,您可以使用unchecked關鍵字為代碼塊抑制它,例如:
byte a = 0xff
byte b = 0x01
unchecked
{
byte results = (byte) a b;
}
或者
byte results = (byte) unchecked(a b);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/363467.html
上一篇:如何用代入法求解這個遞推函式?
