0

我在c#中有这样的东西

        byte a;
        byte b;
        byte c;

        c = a + b;

它给 c = a + b 一个错误并说“不能隐式地将类型'int'转换为'byte'。存在显式转换(你是否缺少强制转换?)。我不明白为什么,因为一切都以字节为单位

涉及 Matlab 是因为我正在将一个图像处理程序从 matlab 转换为 c#,在其中我从 uint8 的图片中获取值并使用该值进行计算,当它这样做时,unit8 接管并且在任何计算期间,任何高于 255 的数字都被设置到 255。所以在 c# 中,我只是将所有变量都设为字节,因为无论如何它们都低于 255,但就像在运行计算时的示例代码中一样,错误会弹出。

4

2 回答 2

1

赋值运算符右侧的算术表达式默认为 int

字节 - MSDN

以下赋值语句将产生编译错误,因为赋值运算符右侧的算术表达式默认计算为 int。

byte x = 10, y = 20;
byte z = x + y;   // Error: conversion from int to byte

通过添加显式转换,错误将如下所示:

byte z = (byte)(x + y);   
于 2013-07-11T18:00:46.563 回答
0

在任何计算期间,任何高于 255 的数字都设置为 255。

这在 C# 中本机不支持。相反,强制转换的默认行为(byte)是采用最低有效字节,给出相当于模 256 的算术结果。

c = unchecked((byte)(200 + 200));

上面的结果将是144,相当于400 % 256

如果要在 255 处剪辑结果,则需要明确指定:

c = (byte)Math.Min(a + b, 255);
于 2013-07-11T18:07:48.803 回答