计算差异

本文关键字:计算 | 更新日期: 2023-09-27 18:21:57

我在c#中有这样的东西

        byte a;
        byte b;
        byte c;
        c = a + b;

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

之所以涉及到Matlab,是因为我正在将一个图像处理程序从Matlab翻译成c#,在这里我从一张uint8的图片中获取值,并用该值进行计算,当它这样做时,第八单元接管,在任何计算过程中,任何高于255的数字都被设置为255。所以在c#中,我只是把所有的变量都设为字节,因为它们都在255以下,但就像在示例代码中一样,当运行计算时,会弹出错误。

计算差异

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

请参阅字节-MSDN

以下赋值语句将产生编译错误,因为赋值运算符默认计算为int。

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

通过添加显式强制转换,错误将类似于:

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

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

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

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

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

如果你想将结果剪辑到255,你需要明确指定:

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