加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么Bytes残留?

发布时间:2020-12-15 19:40:18 所属栏目:百科 来源:网络整理
导读:我最近一直在玩一些字节数组(处理灰度图像).一个字节的值可以是0-255.我正在修改字节,并遇到了我分配给字节的值超出字节范围的情况.它正在为我正在玩的图像做出意想不到的事情. 我写了一个测试,并了解到该字节仍然存在.例: private static int SetByte(int
我最近一直在玩一些字节数组(处理灰度图像).一个字节的值可以是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个最低有效位,忽略其余位.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读