看看这个C#代码:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
Run Code Online (Sandbox Code Playgroud)
对byte(或short)类型执行的任何数学运算的结果都隐式地转换回整数.解决方案是将结果显式地转换回一个字节:
byte z = (byte)(x + y); // this works
Run Code Online (Sandbox Code Playgroud)
我想知道的是为什么?它是建筑吗?哲学?
我们有:
int+ int=intlong+ long=longfloat+ float=floatdouble+ double=double那么为什么不呢:
byte+ byte=byteshort+ short= short?一点背景:我正在对"小数字"(即<8)执行一长串计算,并将中间结果存储在一个大数组中.使用字节数组(而不是int数组)更快(因为缓存命中).但是通过代码传播的大量字节转换使得它更加难以理解.
如果我有两个byte小号a和b,怎么来的:
byte c = a & b;
Run Code Online (Sandbox Code Playgroud)
关于将byte转换为int会产生编译器错误?它这样做,即使我把一个显式类型转换前面a和b.
另外,我知道这个问题,但我真的不知道它是如何应用的.这似乎是一个返回类型的问题operator &(byte operand, byte operand2),编译器应该能够像任何其他运算符一样进行排序.
我有这样的方法:
void Method(short parameter)
{
short localVariable = 0;
var result = localVariable - parameter;
}
Run Code Online (Sandbox Code Playgroud)
为什么结果Int32而不是Int16?
当我试图做这样的事情时,我收到了一个错误:
byte a = 23;
a = a - 1;
Run Code Online (Sandbox Code Playgroud)
编译器给出了这个错误:Test.java:8:可能发现精度损失:int required:byte a = a - 1; ^ 1错误
转换不能解决错误...为什么编译器不让我这样做?我是否需要将变量'a'转换为int?