计算差异

时间:2013-07-11 17:58:00

标签: c# matlab byte uint

我在c#

中有类似的东西
        byte a;
        byte b;
        byte c;

        c = a + b;

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

Matlab参与是因为我正在将图像处理程序从matlab转换为c#,其中我从uint8的图片中获取值,并在执行该计算时使用该值进行计算,unit8接管并且在任何计算期间任何数字都高于255设置为255.所以在c#中我只创建了所有变量字节,因为它们都在255以下,但就像在运行计算时的示例代码中一样,错误弹出。

2 个答案:

答案 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);