一、强制类型转换导致数据的变化
举例:short类型的值范围为-32768 ~ 32767,看下面这些对short值的操作
short s32768 = (short) 32768;
System.out.println("32768强制转换后的结果为:" + s32768);
short s32769 = (short) 32769;
System.out.println("32769强制转换后的结果为:" +s32769);
short s65535 = (short) 65535;
System.out.println("65535强制转换后的结果为:" +s65535);
short s65536 = (short) 65536;
System.out.println("65536强制转换后的结果为:" +s65536);
1
2
3
4
5
6
7
8
9
10
11
shorts32768=(short)32768;
System.out.println("32768强制转换后的结果为:"+s32768);
shorts32769=(short)32769;
System.out.println("32769强制转换后的结果为:"+s32769);
shorts65535=(short)65535;
System.out.println("65535强制转换后的结果为:"+s65535);
shorts65536=(short)65536;
System.out.println("65536强制转换后的结果为:"+s65536);
最后的输出结果为:
32768强制转换后的结果为:-32768
32769强制转换后的结果为:-32767
65535强制转换后的结果为:-1
65536强制转换后的结果为:0
1
2
3
4
32768强制转换后的结果为:-32768
32769强制转换后的结果为:-32767
65535强制转换后的结果为:-1
65536强制转换后的结果为:0
二、关于一些运算后生成的默认值
对于长度小于或者等于int的数据类型,如short, byte在进行如下运算后,其他运算结果为int型
<>,>>>,&,|,^,+,-,*,/
如下代码,就会提示你将运算强制转换成short类型
short b222 = 10;
short sdddd = b222 - 8;
1
2
shortb222=10;
shortsdddd=b222-8;
三、有符号数转无符号数
可以通过&运算将有符号号转为无符号数,
对于byte类型& 0xFF,
对于short类型& 0xFFFF,
对于int类型& 0xFFFFFFFF
注意&运算完的结果是一个int型的值
下面看一个示例代码:
public static void main(String[] args){
byte negb = -8;
int negbint = negb & 0xFF;
int castint = (int)negb;
System.out.println("-8: " + byte2binary(negb));
System.out.println("-8 & 0xFF: " + negbint);
System.out.println("negbint: " + int2binary(negbint));
System.out.println("-8 强制转换成int: " + castint);
System.out.println("castint: " + int2binary(castint));
}
public static String int2binary(int value){
String ibstr = Integer.toBinaryString(value);
// 显示全部二进制字符,32位
while (ibstr.length() < 32){
ibstr = "0" + ibstr;
}
String ibstr1 = ibstr.substring(0, 8) + " " + ibstr.substring(8, 16) + " " + ibstr.substring(16, 24) + " " + ibstr.substring(24, 32);
return ibstr1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
publicstaticvoidmain(String[]args){
bytenegb=-8;
intnegbint=negb&0xFF;
intcastint=(int)negb;
System.out.println("-8: "+byte2binary(negb));
System.out.println("-8 & 0xFF: "+negbint);
System.out.println("negbint: "+int2binary(negbint));
System.out.println("-8 强制转换成int: "+castint);
System.out.println("castint: "+int2binary(castint));
}
publicstaticStringint2binary(intvalue){
Stringibstr=Integer.toBinaryString(value);
// 显示全部二进制字符,32位
while(ibstr.length()<32){
ibstr="0"+ibstr;
}
Stringibstr1=ibstr.substring(0,8)+" "+ibstr.substring(8,16)+" "+ibstr.substring(16,24)+" "+ibstr.substring(24,32);
returnibstr1;
}
运行结果:
-8: 11111000
-8 & 0xFF: 248
negbint: 00000000 00000000 00000000 11111000
-8 强制转换成int: -8
castint: 11111111 11111111 11111111 11111000
1
2
3
4
5
-8:11111000
-8&0xFF:248
negbint:00000000000000000000000011111000
-8强制转换成int:-8
castint:11111111111111111111111111111000
强制类型转换并没有改变符号。
四、负数的左移位操作
负数的左移位操作会使数据保持为负数
打赏
微信扫一扫,打赏作者吧~