Java数据类型转换的一些问题总结
分类:Java, Java语言, Uncategorized
阅读 (1,263)
8月 062019
一、强制类型转换导致数据的变化
举例:short类型的值范围为-32768 ~ 32767,看下面这些对short值的操作
1 2 3 4 5 6 7 8 9 10 11 |
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 |
32768强制转换后的结果为:-32768 32769强制转换后的结果为:-32767 65535强制转换后的结果为:-1 65536强制转换后的结果为:0 |
二、关于一些运算后生成的默认值
对于长度小于或者等于int的数据类型,如short, byte在进行如下运算后,其他运算结果为int型
<<,>>,>>>,&,|,^,+,-,*,/
如下代码,就会提示你将运算强制转换成short类型
1 2 |
short b222 = 10; short sdddd = b222 - 8; |
三、有符号数转无符号数
可以通过&运算将有符号号转为无符号数,
对于byte类型& 0xFF,
对于short类型& 0xFFFF,
对于int类型& 0xFFFFFFFF
注意&运算完的结果是一个int型的值
下面看一个示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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 |
-8: 11111000 -8 & 0xFF: 248 negbint: 00000000 00000000 00000000 11111000 -8 强制转换成int: -8 castint: 11111111 11111111 11111111 11111000 |
强制类型转换并没有改变符号。
四、负数的左移位操作
负数的左移位操作会使数据保持为负数
Sorry, the comment form is closed at this time.