[問題] 負數處理

看板C_Sharp (C#)作者 (dabid')時間9年前 (2016/04/12 18:41), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/2 (看更多)
小弟要將兩個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

04/12 18:48, , 1F
先用正數做 最後再改成負數即可
04/12 18:48, 1F

04/12 19:01, , 2F
你在新竹?
04/12 19:01, 2F

04/12 19:30, , 3F
為什麼b你要轉int32 ?
04/12 19:30, 3F

04/13 08:04, , 4F
當然會補1阿 計算機概論(?)有修過嗎
04/13 08:04, 4F

04/13 19:59, , 5F
a << 16 | (b & 0xFFFF),這樣是你預期的嗎?
04/13 19:59, 5F
文章代碼(AID): #1N3D3Jgg (C_Sharp)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
文章代碼(AID): #1N3D3Jgg (C_Sharp)