[问题] 负数处理

楼主: dabiddabid (dabid')   2016-04-12 18:41:19
小弟要将两个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
请问这要如何解决?
作者: wa007123456 (大笨羊)   2016-04-12 18:48:00
先用正数做 最后再改成负数即可你在新竹?
作者: Litfal (Litfal)   2016-04-12 19:30:00
为什么b你要转int32 ?
作者: lucky1lk (赌到没钱的人)   2016-04-13 08:04:00
当然会补1阿 计算机概论(?)有修过吗
作者: yeo1987 (Archie)   2016-04-13 19:59:00
a << 16 | (b & 0xFFFF),这样是你预期的吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com