c語言中,如果將無符號數轉換為有符號數



在使用ti的adc芯片ads1259時,芯片是24為數據格式保存的,其中最高位是符號位,因此可以理解為是有符號數據,但是在嵌入式系統中,沒有直接24位的變量,因此使用32的無符號先保存24位的數據。


如果最高位不是1,那么很簡單,直接乘以lsb對應的電壓,即可得到真實的電壓值。


如果最高位1,說明是有符號的,因此,我們用無符號的32位保存的時候需要進行轉換,其實,學過計算機基礎的就知道補碼的原理,在ads1259中,0xffffff是最小值-1,0x800000是負的最大值(這里說的是絕對值)。假如我們得到0x00A12CC8,說明是負值,那么如何轉換到有符號的數據呢?


c語言中有如下方法:

unsigned int ua = 0x00A12CC8;
int ib = (int)(ua-0xffffff)-1;
int ic = ua | 0xff000000;
printf("ib = %d 0x%x\n",ib, ib);
printf("ic = %d 0x%x\n",ic, ic);
輸出的值如下
ib = -6214456 0xffa12cc8
ic = -6214456 0xffa12cc8

 那么吧ic或ib兩個值保存乘以lsb對應的電壓,保存到float變量中,就得到了負的電壓值。

當然,數據保存,格式轉換要注意不能溢出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM