day03 - 强制转换问题

byte a = (byte)128; 

byte b = (byte)-129; 

那么 a = -128

   b = 127; 

 

为什么?

1)

(ps: int i 其实有32位 该图未全部写出)

byte 在内存中占八位, 它取所赋给量的后八位为它的值(二进制)

2)

 其次要了解负数在计算机中的存储方式 补码

最高位为1即为负数 即为补码 然后倒推其真实的数据

 

 

 

 

besides:

(1)

凡byte\short\char类型的数据在运算时都会自动转换成int数据类型再运算

public class Demo2{

  public static void main(String[] args) {

    byte a = 1;
    byte b = 2;
    byte c = (byte)(a+b);
    System.out.println(c);
  }
}

所以该程序 若不对a+b进行强制转换 将会报错

 

 (2)

public class Demo4{

  public static void main(String[] args) {

    int a = 1;
    long b = 2;
    a = a+b;
    System.out.println(a);
  }
}

两个不同的数据类型在进行运算的时候 结果取决于大的数据类型

 

(3)

该程序运行不会出错 

但 (一个整数没有加上任何标识的时候,默认是int

所以改程序 仍是大数据类型赋给了小的数据类型

理论上是会报错的 但是

而以下情况是会报错的

 

posted @ 2017-01-10 09:54  张叉叉儿  阅读(68)  评论(0)    收藏  举报