[問題] 12 bits數值轉成16 bits 數值

看板C_and_CPP作者 (藍色草原)時間12年前 (2012/04/05 00:24), 編輯推噓0(006)
留言6則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Keil uC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NO 問題(Question): 目前的應用上有一筆12bits的資料讀出來時是這樣的(舉例) Data_H = 10111100 Data_L = 1100XXXX 分為high 和low兩部分 我希望把它變為 DataNew_H = 11111011 DataNew_L = 11001100 這樣,也就是正常的16bits表示 餵入的資料(Input): Data_H = 10111100 Data_L = 1100XXXX 預期的正確結果(Expected Output): DataNew_H = 11111011 DataNew_L = 11001100 錯誤結果(Wrong Output): 現在跑出來是對的,程式碼如下 只是覺得有點冗長,不知道是否有更好的寫法? 程式碼(Code):(請善用置底文網頁, 記得排版) if(Data_H >> 7) temp = ((Data_H << 4) | (Data_L >> 4)) | 0xF000; else temp = ((Data_H << 4) | (Data_L >> 4)); DataNew_H = temp >> 8; DataNew_L = temp & 0x00FF; 補充說明(Supplement): 目前問題如上所述,小弟寫程式還不到一年 還請各位高手提點一下,感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.66.186 ※ 編輯: brettchen 來自: 140.115.66.186 (04/05 00:37)

04/06 18:16, , 1F
請問XOR ~可以用嗎@@?
04/06 18:16, 1F

04/07 02:12, , 2F
~ 是 NOT ^ 才是 XOR 的樣子
04/07 02:12, 2F

04/07 02:17, , 3F
如果是XOR要如何使用呢? 稍微想了一下沒有頭緒,有請樓
04/07 02:17, 3F

04/07 02:17, , 4F
上指點一下
04/07 02:17, 4F

04/07 02:31, , 5F
阿 忘了說這邊除了temp是宣告成U16,其他都是宣告成U8
04/07 02:31, 5F

04/07 03:27, , 6F
這條件差很多耶!用 union 做如何?
04/07 03:27, 6F
文章代碼(AID): #1FV7N9c0 (C_and_CPP)