添加到字节而不溢出

Boa*_*ler 2 c# algorithm byte

对于某些 API 集成,我有一个操作,需要添加两个字节并得到一个字节作为结果。这是某种校验和。现在本质上可能会发生溢出。

例如

byte a = 0xff
byte b = 0x01
byte results = a + b;
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的内置语法来避免溢出以移动到下一个字节,或者我是否必须自己执行此操作?例如减去完整字节等等?没有找到相关的 API,我是否忽略了什么?

Dmi*_*nko 5

然而,当您添加bytes 时,结果是int,例如

byte a = 100;
byte b = 200;

var result = a + b; // result == 300
Run Code Online (Sandbox Code Playgroud)

由于 和ab0..255范围内,因此结果将在0..510范围内并且不可能出现整数溢出。但你想要byte result,这就是你需要演员的原因:

byte result = (byte) (a + b);
Run Code Online (Sandbox Code Playgroud)

在这里,.net 可以显示两种类型的反应:

  • 检查ans 抛出溢出异常
  • 检查并忽略溢出:等256 -> 0257 -> 1

我们想要第二种选择,这就是原因unchecked

byte result = unchecked((byte) (a + b));
Run Code Online (Sandbox Code Playgroud)