作者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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1460457683.A.AAA.html
1F:推 wa007123456: 先用正数做 最後再改成负数即可 04/12 18:48
2F:→ wa007123456: 你在新竹? 04/12 19:01
3F:→ Litfal: 为什麽b你要转int32 ? 04/12 19:30
4F:→ lucky1lk: 当然会补1阿 计算机概论(?)有修过吗 04/13 08:04
5F:推 yeo1987: a << 16 | (b & 0xFFFF),这样是你预期的吗? 04/13 19:59