java数据类型转换显示转换_Java数据类型转换的一些问题总结

一、强制类型转换导致数据的变化

举例: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

强制类型转换并没有改变符号。

四、负数的左移位操作

负数的左移位操作会使数据保持为负数

打赏

f69872ab5631b766bfb8c62b6b7d28fa.png微信扫一扫,打赏作者吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值