这几天在整音频相关的东西,无意间发现了一个有趣的事情
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
short a = 0xFF00; // -256
char b = 0xF0; // -16;
所以a + b是-272,也即FEF0。
注意char类型的0xF0,强制转型成short后不等于0x00F0。你需要的是unsigned char。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。