社区
Java SE
帖子详情
再次讨论int、byte编译问题
tyut8518
2008-09-09 07:21:04
1. byte b1=(int)1;
2. byte b2 =1;
3. byte b3 =b1+b2;
4. byte b4 =1+1;
第3行为什么编译不能通过?
...全文
182
10
打赏
收藏
再次讨论int、byte编译问题
1. byte b1=(int)1; 2. byte b2 =1; 3. byte b3 =b1+b2; 4. byte b4 =1+1; 第3行为什么编译不能通过?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
LoveJava520
2008-09-10
打赏
举报
回复
b1+b2,是整形,要转换为byte是错误的
axman
2008-09-10
打赏
举报
回复
换句话说,i=i++;可以,i=i+1;不行,那些牛人你来回答啊.
tyut8518
2008-09-09
打赏
举报
回复
呵呵 大家都比我牛 那你就告诉我吧 我没学过编译原理 有点不明白里边执行的原理与差别
axman
2008-09-09
打赏
举报
回复
你让上面的所谓的牛人答啊,不知道编译原理.想当然地瞎哄.
tyut8518
2008-09-09
打赏
举报
回复
1. byte b1=(int)1;
2. byte b2 =1;
3. byte b3 =b1+b2;
4. byte b4 =1+1;
在数值计算时,整数1也是默认为int类型的,在其他三行为什么就不需要强制类型转换呢???
no9988
2008-09-09
打赏
举报
回复
[Quote=引用 3 楼 ZangXT 的回复:]
byte b3 =b1+b2;
b1+b2计算的时候把类型提升为int,所以结果是int类型的,你直接把int数赋给byte数所以报错.
直接看报什么错误就知道了.
[/Quote]
回答很对
因为 两个byte 相加的后的类型 会 转换成 int的
所以你 需要强制转换 回去`
`byte b3 =(byte)b1+b2;
这样写就应该对了
`
axman
2008-09-09
打赏
举报
回复
编译指令很简单,小于10的操作都有专门的指令,节省了操作数占用的空间.
i_load1;
就是byte操作直接用int指令操作. i_xxxx,没有b_xxx,s_xxx.c_xxx,所有byte,short,char,都是i_指令,最后itox转换回去
ZangXT
2008-09-09
打赏
举报
回复
byte b3 =b1+b2;
b1+b2计算的时候把类型提升为int,所以结果是int类型的,你直接把int数赋给byte数所以报错.
直接看报什么错误就知道了.
tyut8518
2008-09-09
打赏
举报
回复
不太了解状态机的工作原理,能否通俗一点 ,我只想了解JVM是怎么编译这些语句的
axman
2008-09-09
打赏
举报
回复
因为JVM为了做得小,减少了指令集.所有小于int的操作都以int指令操作然后itoX转换成原来的类型.
指令没有状态机,byte i = 0;i++操作从操作数知道i是byte,所以++后会自动itob.
但+操作和赋值操作之间没有状态.也就是根本不知道+后要赋给什么,有可能赋给long
所以不可能推算出itob.当然根据源码的下一行可以推算,但那不是指令做的事.
Java中两个
byte
类型相加结果赋值给
byte
类型的变量会报
编译
错误,
byte
加
byte
的结果为什么是
int
?
本文深入探讨了Java中
byte
类型数据的运算规则及其背后的原因,解释了为何
byte
加
byte
会默认转换为
int
类型,以及这一设计如何与Java虚拟机指令集相关联。
C++中把
BYTE
转换为
int
本文详细介绍了如何将
BYTE
类型转换为
INT
类型,并通过实例展示了两种不同的转换方法:一种是将
BYTE
放在
INT
的低位,另一种是将两个
BYTE
分别放置在
INT
的高位和低位。
int
与
byte
[] 的相互转换
博客介绍了
int
与
byte
[]相互转换的方法。包括最普通的方法,通过位运算实现转换;强力推荐使用BitConverter类进行转换;还提到了Unsafe代码,虽需更改
编译
选项,但在将结构类型转换成
byte
[]时较为方便。
byte
加
byte
居然是
int
了?
博客探讨了Java中
byte
等类型运算结果类型变化的
问题
。现象是
byte
、short、char等类型运算后结果变为
int
类型,不能赋值给原类型变量。原理是Java运算时会对操作数类型提升,且JVM操作数栈和局部变量表单位为32位,字节码指令也无
byte
类型运算指令。
C语言中
byte
类型与
int
类型转换与移位小细节记录
本文详细介绍了C语言中
int
型和
byte
型之间的转换,以及移位操作的注意事项。针对
int
转
byte
,只需取低八位;
byte
转
int
时,由于是有符号类型,最高位为1时会变为负数。左移<<操作,无论是否有符号,都会舍弃溢出位并在最低位补0。右移>>操作,无符号
int
最高位补0,有符号
int
则保持符号不变。移位过程中,超出范围的数值会在计算机表示范围内循环。
Java SE
62,621
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章