位移运算? 下面这段代码: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写先进先出算法,置换算法,急!!!!! 如何将java GUI 的项目与jdk一同打包成exe可执行文件 java 分组(急急!!!!!) 文件夹选择对话框 奇怪的代码 做哪快开发的比较好找工作? 小问题? 下列语句为什么出错!!! 求高手修改一段JAVA代码,解决窗体关不掉的问题 使用JBuilder7问题 一道面试题:同步方法与同步代码块的区别 使用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 去判斷。
因此造成型別錯誤。