我最近一直在玩一些字节数组(处理灰度图像)。一个字节的值可以是 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# - 为什么字节结转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166100/