计算差异
本文关键字:计算 | 更新日期: 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);