有符号数据的符号位扩展
生活随笔
收集整理的這篇文章主要介紹了
有符号数据的符号位扩展
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介:
在寫傳感器驅動程序的時候經常會遇到輸出數據位數在8到16位之間。這樣,在調試的時候如果使用printf直接輸出數據,有可能出現錯誤。因為printf在打印的時候會做數據類型判斷。所以我們需要對數據做符號位擴展。使用例子:
比如說現在有一個輸出為12位的加速度計數據,最高位表示數據符號位。現在讀取X軸的數據(兩個8位寄存器)如下:所以我們需要一個16位有符號變量來存儲X軸的數據,現定義一個 int16_t data_x = 0;且data_x = ((OUT_X_MSB << 4) | (OUT_X_LSB >> 4));因為我們定義的時候data_x是一個16位數據,而加速度計實際有效數據是12位,所以data_x的高4位是偽數據。這是就需要進行符號位擴展了。 具體操作如下: if(printf_datax & (1 << 11)) ? // 12位有符號數據需要左移11
{
printf_datax |= 0xf000;
} 上面的操作是對有符號數據進行符號擴展的操作,通過給負數值“或1”實現的。或1的位域是除了有效數據之外的所有位域。
總結
以上是生活随笔為你收集整理的有符号数据的符号位扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派上搭建Git服务器
- 下一篇: Protocol Buffer基本语法