java基本数据类型转换溢出问题

java的基本数据类型有(int、byte、double、float、char、boolean、long、short);这里介绍整型数据

示例1:

public class H_Z01 {

  public static void main(String[] args) {
    int b = 350;
    byte a = (byte) 350 ;
  System.out.println(a);
  System.out.println(Integer.toBinaryString(b));

  }

}

输出为:

94
101011110

发生了截取,将前面的代码更新为:

public class H_Z01 {

  public static void main(String[] args) {
    int b = 350;
    byte a = (byte) 350 ;
    System.out.println(a);
    System.out.println(Integer.toBinaryString(b));
    System.out.println(Integer.valueOf("01011110",2).toString()) ;
  }

}

输出为:

94
101011110
94

一开始为从左为有移到使用的数据类型的位数。

例如:

350---->101011110

截取成为byte成为 01011110

但是看下面的示例自己就蒙了

示例2

public class H_Z02 {

  public static void main(String[] args) {
    int b = 450;
    byte a = (byte) 450 ;
  System.out.println(a);
  System.out.println(Integer.toBinaryString(b));

  }

}

输出为:

-62
111000010

按照更新代码后:

public class H_Z02 {

  public static void main(String[] args) {
    int b = 450;
    byte a = (byte) 450 ;
  System.out.println(a);
  System.out.println(Integer.toBinaryString(b));

  System.out.println(Integer.valueOf("11000010",2).toString()) ;

  }

}

输出为:

-62
111000010
66

认为第一位为符号为那么为11000010,那么应该取数值为0100010为66,那么1100010为-66

结果依然不正确。

查取资料获得技能:

除符号位取补码

先截取为11000010

那么为10111110

在进行计算:

public class H_Z02 {

  public static void main(String[] args) {
    int b = 450;
    byte a = (byte) 450 ;
  System.out.println(a);
  System.out.println(Integer.toBinaryString(b));

  System.out.println(Integer.valueOf("00111110",2).toString()) ;

  }

}

运行结果为:

-62
111000010
62

添加符号位:-62

与运行结果相同

总结:

java中整数溢出是取补

猜你喜欢

转载自www.cnblogs.com/hhxz/p/9706084.html