c# – 为什么Bytes残留?

我最近一直在玩一些字节数组(处理灰度图像).一个字节的值可以是0-255.我正在修改字节,并遇到了我分配给字节的值超出字节范围的情况.它正在为我正在玩的图像做出意想不到的事情.

我写了一个测试,并了解到该字节仍然存在.例:

private static int SetByte(int y)
{
    return y;
}
.....
byte x = (byte) SetByte(-4);
Console.WriteLine(x);
//output is 252

有一个结转!当我们走另一条路时,就会发生这种情况.

byte x = (byte) SetByte(259);
Console.WriteLine(x);
//output is 3

我希望它在第一种情况下将其设置为255,在第二种情况下将其设置为0.这个结转的目的是什么?是不是因为我正在投射这个整数赋值?什么时候在现实世界中有用?

最佳答案
byte x = (byte) SetByte(259);
Console.WriteLine(x);
//output is 3

SetByte结果的强制转换是将模256应用于整数输入,有效地丢弃超出一个字节范围的位.

259%256 = 3

原因:实施者选择仅考虑8个最低有效位,忽略其余位.

转载注明原文:c# – 为什么Bytes残留? - 代码日志