开发者社区> 问答> 正文

short + byte 出现奇怪的事情

这几天在整音频相关的东西,无意间发现了一个有趣的事情

System.out.println(String.format("0xFF00 + 0xF0 = %04X",

    (short) ((short) 0xFF00 + (byte) 0xF9)));

显示的结果有点出乎意外,所以我有换成了 C/C++

short a = 0xFF00;
char b = 0xF0;
printf("a + b = %X", (short)(a+b));
没错,结果跟 java 的一样,都是 FEF0

一直以来,俺都是尽量不在代码里面显式类型转换的,从教科书上来看,
byte/char 比 short 类型低级,在表达式内部应该会隐式类型转换的

可是换成两个同样是 short 类型的数值相加才能得到希望的结果,这是什么 gui

展开
收起
a123456678 2016-06-07 20:00:01 1839 0
1 条回答
写回答
取消 提交回答
  • 码农|Coder| Pythonista
    short a = 0xFF00; // -256
    char b = 0xF0; // -16;

    所以a + b是-272,也即FEF0。
    注意char类型的0xF0,强制转型成short后不等于0x00F0。你需要的是unsigned char。

    2019-07-17 19:30:55
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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