c# - 为什么字节结转?

标签 c#

我最近一直在玩一些字节数组(处理灰度图像)。一个字节的值可以是 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/

相关文章:

c# - 错误 ID 的伪增量数会成为问题吗?

c# - 当元素为变量时创建json对象

c# - 私有(private)保护不起作用

c# - 添加的图表系列点与 X 轴不同步

c# - 更改 ActionBar 颜色 - Xamarin

c# - 以编程方式触发控件的事件

c# - 在 Entity Framework 中保存

c# - 如何在C#中将所有Excel工作表导入DataSet

c# - 成就/徽章架构

c# - 在所有任务完成之前防止异步方法返回