作者dabiddabid (dabid')
看板C_Sharp
標題[問題] 負數處理
時間Tue Apr 12 18:41:19 2016
小弟要將兩個Int16數字組成Int32
Int16 a = -30 ;//1111 1111 1110 0010
Int16 b = -19456 ; //1011 0100 0000 0000
現在想把ab組合在一起成Int32(ab)//1111 1111 1110 0010 1011 0100 0000 0000
原本是想將兩個都先ToInt32將a << 16 然後(a | b)
但現在發現負數Int16轉Int32會將前面全部補1
b會變成1111 1111 1111 1111 1011 0100 0000 0000
但我想要的是0000 0000 0000 0000 1011 0100 0000 0000
也就是想要a|b結果是-1920000//11111111111000101011010000000000
但實際現在結果卻是-19456 //11111111111111111011010000000000
請問這要如何解決?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.51.121
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1460457683.A.AAA.html
推 wa007123456: 先用正數做 最後再改成負數即可 04/12 18:48
→ wa007123456: 你在新竹? 04/12 19:01
→ Litfal: 為什麼b你要轉int32 ? 04/12 19:30
→ lucky1lk: 當然會補1阿 計算機概論(?)有修過嗎 04/13 08:04
推 yeo1987: a << 16 | (b & 0xFFFF),這樣是你預期的嗎? 04/13 19:59