本帖最后由 摩天轮1111 于 2016-2-29 15:02 编辑
如标题所示,有点疑问,这里接触到一个芯片,寄存器是8位的寄存器,但是数据是16位的,要用两个寄存器分别表示高8位和低8位,数据手册上也写的是寄存器要用2进制补码,但是看到的官方里面的例程上的写法有点疑惑,
file:///C:\Users\袁玉斌\AppData\Roaming\Tencent\Users\792286050\QQ\WinTemp\RichOle\`_4SIYQ8F5B(Z~)E9WH5S6S.png
如上所示,他是先把高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位在或进来感觉是不是不一样啊?它先强转高8位,然后若再只是把低8位用加号加进来我感觉那好像还符合逻辑一点,小弟这里理解不到位,请大神解惑
这里问题我写的时候没注意,大家都理解到了那个移位移出去的那个上面去了,我的失误,不好意思,我改了一下2的表达式,我是想表达的是这个意思,或者说1和3表达的意思是一样的吗?
|