最近做了乙個專案,需要高八位和低八位的資料顛倒一下,需要轉換的資料是有符號的16位資料,我編寫的函式如下 :
//16bit資料高低位互換程式
int16 rearrange16(int16 data)
後來發現乙個問題:送出來的資料都沒有負數,正常情況下是正負都有的,經過除錯發現了問題所在,現在把我的心
得寫出來,一是可以給自己個記性,另外還可以讓其他朋友少走彎路。
以上程式在轉換正數時是沒問題的,在轉換負數時就有問題了,首先把地位右移8位是沒問題的,當把高位移到低位時
問題出來了,高位填充的全部是符號位,即0xffxx;
比如我要轉的資料是0x8070,想要的結果是0x7080,而實際的結果是0xff80;
解決辦法:
把輸入的資料轉換成無符號型別就可以了,程式如下:
//16bit資料高低位互換程式
uint16 rearrange16(uint16 data)
剛開始的時候還擔心把有符號轉換成無符號數會丟失掉符號位,後來經過除錯發現不會丟失符號位,比如說int16 =
0x8099; 轉換成無符號數之後還是0x8099;
不同的是它們表示的數不一樣而已,如是int16的型別那麼它就表示的是-***x,如果他是uint16型別那麼它就表示的是
正的***x.
有符號數和無符號數
有符號和無符號整數 1.通常情況下,大多數字預設的是有符號數,比如 4,5 要想寫乙個無符號數必須在後面加u 比如 4u,5u 2.在計算機中有符號數是用補碼的形式來表示的,最高位是符號位。無符號數就是正數唄 正數的補碼和原碼相同。比如 1 在計算機中表示為 11111111 11111111 11...
無符號數和有符號數
人有十個手指頭,習慣了逢十進一,於是十進位製成了生活中的標準。程式的世界只有高低電平兩種狀態,更適合用二進位制來表示,於是二進位製成了程式世界的標準。對與無符號數來說,我們更喜歡談他們之間的轉化,十進位制是我們最習慣的進製,於是十進位制轉為r進製,r進製轉為十進位制變尤為重要。十進位制 r進製 整數...
有符號數和無符號數
刷題刷到了有符號數的問題,回顧一下知識點 有符號數 signed 可以區分正負數 最高位表示數值的正負 0表示正數,1表示負數 無符號數 unsigned 不區分正負數 只有整數型別 雖然無符號數所能表示的最大數值大於有符號數,但兩者所能表示的數值範圍相同。eg.short int 128,0 0,...