关于C#:计算差异

Calculation differences

本问题已经有最佳答案,请猛点这里访问。

我在C里有类似的东西#

1
2
3
4
5
        byte a;
        byte b;
        byte c;

        c = a + b;

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

Matlab参与其中是因为我正在将Matlab中的图像处理程序转换为C,在C中,我从uint8图片中获取值,并在计算时使用该值进行计算,Unit8将接管,在任何计算过程中,任何大于255的数字都将设置为255。所以在C中,我只是把所有变量字节都设置成字节,因为无论如何,它们都小于255个字节,但就像在运行计算时的示例代码中一样,错误会弹出。


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

参阅字节-MSDN

The following assignment statement will produce a compilation error,
because the arithmetic expression on the right-hand side of the
assignment operator evaluates to int by default.

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

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

1
byte z = (byte)(x + y);


During any calculations any number higher than 255 is set to 255.

C中本机不支持此功能。相反,(byte)转换的默认行为是取最低有效字节,得到的算术结果相当于模256。

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

以上结果为144,相当于400 % 256

如果要将结果剪辑为255,则需要显式指定:

1
c = (byte)Math.Min(a + b, 255);