社区
Java SE
帖子详情
位移运算?
赵Andy
2010-11-13 10:03:07
下面这段代码:
byte a=5;
byte b=a<<2;
为什么不行?
为什么
int b=a<<2;
就可以,哪位大侠解释一下。
...全文
144
6
打赏
收藏
位移运算?
下面这段代码: byte a=5; byte b=a<<2; 为什么不行? 为什么 int b=a<<2; 就可以,哪位大侠解释一下。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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]
楼上都回答了
数值
位移
及异或
运算
计算器
简单小工具,输入十进制数值计算结果,C# WINFORM版,非源码
计算机组成原理 带
位移
运算
模型机的设计与实验报告
计算机组成原理 带
位移
运算
模型机的设计与实验:包括实验要求,内容,步骤,总结等。。。
wxh 指针,算术,
位移
运算
开发包部份示例代码[AsmInVB].
指针,算术,
位移
运算
开发包部份示例代码[AsmInVB].
不错的主要用于加密的vbs(asp)
位移
运算
类
不错的主要用于加密的vbs(asp)
位移
运算
类
java位
运算
操作
Java位
运算
操作 左
位移
右
位移
与或非的操作
Java SE
62,614
社区成员
307,318
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章