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中本机不支持此功能。相反,
1 |
以上结果为
如果要将结果剪辑为255,则需要显式指定:
1 | c = (byte)Math.Min(a + b, 255); |