java中的字节类型转换

时间:2013-07-29 06:55:26

标签: java type-conversion byte add

程序让我失去精度误差,但我不能想到任何精度损失,因为数字很小

这是代码##

 class Demo  
 {  
   public static void main(String args[])  
   {  
      byte b1=3;  
      byte b2=2;  
      byte b3=b1+b2;  
      System.out.println(b3);  
   }  
 }

4 个答案:

答案 0 :(得分:8)

添加表达式b1 + b2的类型为int - 在int之类的较小类型上没有定义任何加法运算符。因此,为了将其转换回byte,您必须强制转换:

byte b3 = (byte) (b1 + b2);

请注意,虽然碰巧知道值很小,但编译器并不关心你在前两行中设置的值 - 它们都可以为100知道。同样,虽然知道您尝试分配给int变量的byte只是将两个byte值相加的结果(或者更确切地说,两个值从byte升级到int),整个表达式只是int,并且可能来自语言所涉及的任何地方。

(添加可以溢出的事实是一个单独的问题,但这将是一个不一致的参数 - 毕竟,您可以将两个int值一起添加并将结果存储在int变量中,即使添加可能很容易溢出。)

答案 1 :(得分:2)

因为127是byte的最后一个值。 假设b1 = 127且b2 = 2

现在发生了什么b = b1 + b2 = 129 [超出字节范围,即它在int范围内]

现在如果你把它b =(byte)(b1 + b2),你会得到-127这是由于将值四舍五入到byte。

答案 2 :(得分:2)

    byte b1=3;
    byte b2=2;
    byte b3=b1+b2;  // you can't use byte here, Every time addition will result 
                     int value

因为,如果您尝试转换大于字节范围的int,则该值的丢失部分。因此,添加将不允许在此处使用字节。

答案 3 :(得分:0)

什么时候做+, - ,*,/,% java内部使用函数

ex:max(int,操作数1的dataType,操作数2的dataType);

在您的代码中 max(int,byte,byte)==>哪一个更大? ==> int 更大

所以你可能会遇到可能的压力损失 发现:int

必需:byte

另一个例子

 short a =10;
 byte b=20;
 short c = a+b;

现在:

内部:max(int,OP1,OP2);

即max(int,short,byte)==>哪个更大的数据类型?的 INT

所以java除了 int

 int c = a+b;  (works fine)  

另一个例子:

 long a =10;
 byte b=20;
 short c = a+b;

现在:

内部:max(int,OP1,OP2);

即max(int,long,byte)==>哪个更大的数据类型?的

所以java除了

 long c = a+b;(works fine)  

另一个例子:

byte b = 10;
b = b+1;  

现在,
MAX(INT,字节)==>哪个更大的数据类型?的 INT
所以,

int c = b+1;(works fine) or b = (byte) b+1;

希望你理解