我在c#
中有类似的东西 byte a;
byte b;
byte c;
c = a + b;
并且它给出了c = a + b的错误并且说“不能隐式地将类型'int'转换为'byte'。存在显式转换(你是否缺少一个演员?)。我不明白为什么因为一切以字节为单位
Matlab参与是因为我正在将图像处理程序从matlab转换为c#,其中我从uint8的图片中获取值,并在执行该计算时使用该值进行计算,unit8接管并且在任何计算期间任何数字都高于255设置为255.所以在c#中我只创建了所有变量字节,因为它们都在255以下,但就像在运行计算时的示例代码中一样,错误弹出。
答案 0 :(得分:1)
赋值运算符右侧的算术表达式默认情况下计算为int 。
请参阅byte - MSDN
以下赋值语句将产生编译错误, 因为算术表达式在右边 赋值运算符默认情况下计算为int。
byte x = 10, y = 20;
byte z = x + y; // Error: conversion from int to byte
通过添加显式强制转换,错误将如下所示:
byte z = (byte)(x + y);
答案 1 :(得分:0)
在任何计算过程中,任何高于255的数字都设置为255。
C#本身不支持此功能。相反,(byte)
强制转换的默认行为是取最低有效字节,给出等效于模256的算术结果。
c = unchecked((byte)(200 + 200));
上述结果为144
,相当于400 % 256
。
如果要将结果剪辑为255,则需要明确指定:
c = (byte)Math.Min(a + b, 255);