为什么C#中的字节减法需要强制转换?

Bil*_*lly 15 .net c# byte integer casting

我必须使用WinForms在VS2008 .net 3.5中使用以下代码:

byte percent = 70;
byte zero = 0;

Bitmap copy = (Bitmap)image1.Clone();
...

Color oColor = copy.GetPixel(x, y);
byte oR = (byte)(oColor.R - percent < zero ? zero : oColor.R - percent);
Run Code Online (Sandbox Code Playgroud)

当我离开(byte)最后一行代码的" "时,我收到编译器错误,说它"无法隐式转换类型int"到' byte'.如果一切都是类型byte并且byte是整数类型...那么我为什么需要演员?

Cha*_*tin 15

因为减法强制转换为整数.我记得,byte是C#中的无符号类型,因此减法可以将您带出字节域.

  • 减法可以带你走出每一种数字类型的领域。这并不能真正解释为什么没有特定于字节的减法运算符。 (2认同)

sch*_*der 11

那是因为字节减法的结果不适合一个字节:

byte - byte = (0..255) - (0..255) = -255..255
Run Code Online (Sandbox Code Playgroud)

  • 除了浮点数或小数之外,任何整数类型都不是.int也是有限范围的,所以(min_int - max_int)不适合,但它返回一个int. (19认同)
  • @Adam:1)浮点数和小数不是整数类型.2)这些减法的结果也可能不合适,因为它们也具有有限(但很大)的范围. (2认同)

Tim*_*ter 9

字节算术默认情况下会产生一个int值.

  • 链接失效了... (2认同)