位移运算? 下面这段代码:byte a=5;byte b=a<<2;为什么不行?为什么int b=a<<2;就可以,哪位大侠解释一下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样可以:byte a=5;byte b=(byte)(a<<2);a<<2的结果是int类型, 转到int类型需要类型强转 在java中,byte,char,short在运算时会自动转化为int。所以有两种办法,一个就是你下面的那种写法,二就是在运算的过程中强制类型转换!写成byte b=(byte)(a<<2); 类型转化的问题!byte short char 在运算时都会 变int float和double都会变double 這裡有說明。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 去判斷。因此造成型別錯誤。 java面向对象题 求助关于Comparator接口排序的问题!! 创建对象的时候,构造方法里的参数怎么不能传给成员变量??? jbuilder中编写java swing 不显示图片 如何实现重复的JSP code 写log4j的人代码水平如何? JSP 的新闻浏览老是不成功,请教大家 大侠帮忙 初学者要看什么书好! Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别? 一道面试题:同步方法与同步代码块的区别 使用comm.jar smslib 操作modom 接收短信的问题!
byte b=(byte)(a<<2);a<<2的结果是int类型, 转到int类型需要类型强转
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 去判斷。
因此造成型別錯誤。