开发者社区> 问答> 正文

short类型与byte类型相加出现的问题

这几天在整相关的东西,无意间发现了一个有趣的事情
screenshot
显示的结果有点出乎意外,所以我有换成了 C/C++
screenshot
没错,结果跟 java 的一样,都是 FEF0
一直以来,俺都是尽量不在代码里面显式类型转换的,从教科书上来看,byte/char 比 short 类型低级,在表达式内部应该会隐式类型转换的可是换成两个同样是 short 类型的数值相加才能得到希望的结果

展开
收起
蛮大人123 2016-02-28 13:47:02 3604 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    两个操作数都小于 int,将会被同时隐式转换为int进行运算,等价于
    (short) ((int)(short) 0xFF00 + (int)(byte) 0xF0))
    short、byte、int都是有符号的
    (int)(short) 0xFF00的值是 0xFFFFFF00
    (int)(byte) 0xF0的值是 0xFFFFFFF0
    相加的结果就是0xFFFFFEFO,溢出了一位,再强制转换为short,直接截取出0xFEFO

    2019-07-17 18:49:32
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载