java中byte short int的理解
需求:做到一个项目,单片机读取两个字节,这两个字节组成一个补码表示的两字节整形值。在单片机端,只是把这两个字节写到一个字符串中,发向上位机。
分析:首先在java中,涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。
但是在这个问题中,低字节一定是正的,因此低字节跟0xff进行与运算,使得高位都归零,也即
0x0000 00ff (有0xff扩展得到)
0xFFFF FFFF (由l(byte)扩展得到,因为byte是有符号的,但是低位数据实际上是无符号的)
=0x0000 00ff
对于高位数据
要保持其符号位,因此直接左移一个字节即可,最后相加,拼接完毕。
byte h=(byte)0xff; byte l=(byte)0xFF; short a = (short)(l & 0xff+h*256);