他是先把高8位寄存器转成16位的数之后强制转换成了short,然后再把低8位补进去,但是我感觉为什么不是先把高8位和低8位合成16位的数了之后,再强制转换成为short类型的,就是如下,为什么是1这种写法,不是2这种写法。
1.((short)(fifo_data[ii+0] << 8)) | fifo_data[ii+1];
2. (short)((u16)(fifo_data[ii+0] << 8) | fifo_data[ii+1]);
3. (short)(fifo_data[ii+0] << 8) + fifo_data[ii+1] ;
这里很费解,感觉1,2这样的做法得到的结果应该是不一样的啊,因为16位补码表示的数在算的时候,是最高位第15位若为1就是(-8000+u16[0:14]),若为0就是u16[0:14]了,但是若是先处理高8位强转了,后面低8位在或进来感觉是不是不一样啊?
|