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中整数溢出是取补