关于类型转换的一部分问题及思考

一 关于有运算符的转换

举例:

char c = 'a'+1;//不会报错
char ch = c + 1;//会报错

原因:
第一种不报错,是因为右边都是常量,编译器在编译的时候会进行自动合并,不做类型转换,编译阶段就完成,不报错。
第二种报错,是因为右边有变量进行运算,编译器不会进行自动合并,所以在运行时进行编译,发现c是变量,char型,1是int型,所以结果转换为int型,所以会报错。
还有一个未解决;

char c= 145;//不报错
char ch = 70000;//报错
float f = 0.2;//报错

第一个不报错的原因是因为145没超出范围,可以,而第二行超出范围,报错
第三行是因为小数默认为double型的,精度不同,所以出错。
但是为啥两者有不同,我目前还不太懂

二赋值超过范围的转换

举例:

		byte b = 127;
		b += 1;//相当于b = byte(b+1);
		System.out.println(b);

输出结果为-128.
首先byte是一字节,范围-128~127,以补码表示
当byte的127加1的时候具体运算是:

补码
12701111111
+100000001
-12810000000

同样,当再次加1时,会出现

		byte b = 127;
		b += 1;//相当于b = byte(b+1);
		System.out.println(b);
		b += 1;
		System.out.println(b);

输出结果为-128和-127
当byte的-128再加1的时候具体运算是:

补码
-12810000000
+100000001
-12710000001
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值