位移运算?

赵Andy 2010-11-13 10:03:07
下面这段代码:
byte a=5;
byte b=a<<2;
为什么不行?
为什么
int b=a<<2;
就可以,哪位大侠解释一下。
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kebin0001 2010-11-13
  • 打赏
  • 举报
回复
這裡有說明。
Java Language Specification
概要的說
位元運算時,long 保持 long的type, float double無法做位元運算,其他都轉為 int 運算。

但還是有些怪異,所以推論還有以下行為。
雖然位移是轉 int, 可是 byte b = 5 << 2; 又不會有錯,因此雖然是轉 int ,
但可以明確轉型的時候,還是會自己轉型。所以 byte 給 0~127 的 int 也不會有問題。

而 byte b = a<<5; 應該是轉成 int, 又因為 a 是變數,所以不會自動帶 5 去判斷。
因此造成型別錯誤。

凉岑玉 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 houjin_cn 的回复:]
这样可以:

Java code

byte a=5;
byte b=(byte)(a<<2);


a<<2的结果是int类型, 转到int类型需要类型强转
[/Quote]

同意··
弹指三挥间 2010-11-13
  • 打赏
  • 举报
回复
类型转化的问题!byte short char 在运算时都会 变int float和double都会变double
茫茫大海 2010-11-13
  • 打赏
  • 举报
回复
在java中,byte,char,short在运算时会自动转化为int。所以有两种办法,一个就是你下面的那种写法,二就是在运算的过程中强制类型转换!写成byte b=(byte)(a<<2);
houjin_cn 2010-11-13
  • 打赏
  • 举报
回复
这样可以:

byte a=5;
byte b=(byte)(a<<2);

a<<2的结果是int类型, 转到int类型需要类型强转
taoyongming 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hudie1234567 的回复:]
在java中,byte,char,short在运算时会自动转化为int。所以有两种办法,一个就是你下面的那种写法,二就是在运算的过程中强制类型转换!写成byte b=(byte)(a<<2);
[/Quote]
楼上都回答了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧