short + byte 出现奇怪的事情

这几天在整音频相关的东西,无意间发现了一个有趣的事情
javaSystem.out.println(String.format("0xFF00+0xF0=%04X",
(short)((short)0xFF00+(byte)0xF9)));
显示的结果有点出乎意外,所以我有换成了C/C++
cppshorta=0xFF00;
charb=0xF0;
printf("a+b=%X",(short)(a+b));
没错,结果跟java的一样,都是FEF0
一直以来,俺都是尽量不在代码里面显式类型转换的,从教科书上来看,
byte/char比short类型低级,在表达式内部应该会隐式类型转换的
可是换成两个同样是short类型的数值相加才能得到希望的结果,这是什么gui
一只甜甜圈
浏览 320回答 2
2回答

湖上湖

shorta=0xFF00;//-256charb=0xF0;//-16;所以a+b是-272,也即FEF0。注意char类型的0xF0,强制转型成short后不等于0x00F0。你需要的是unsignedchar。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript