在Java中将Two的补码转换为denary

时间:2018-01-19 10:35:41

标签: java binary twos-complement

我正在编写一个程序来进行数字系统转换。 我遇到的问题是当我输入一个二进制补码时,Java将其作为一个正二进制数,例如,如果我输入11111101作为-3而不是程序接收为253.我怎样才能使程序接收 - 3。

1 个答案:

答案 0 :(得分:0)

虽然没有直接解决标题,但是对您的输入进行符号扩展是迈向该目标的一步。以下是一些在更一般的情况下对该工作进行签名扩展的方法,而不仅仅是当输入为8或16或32位时。

  • 依赖算术右移:(x << k) >> k其中k是&#34;未使用的&#34;位。因此,例如,要将8位数字扩展为32位数字,k将为24。
  • XOR技巧:(x ^ m) - m,其中m是一个掩码,其中1与输入的符号位置完全相同。例如,对于8位输入,m = 1 << 7。优点是它只取决于输入,而不是你转换为的类型 - 对于Java而言,它并不是真正的考虑因素,但这使得它在模板化C ++代码中的应用具有吸引力。
  • 明确包装,就像jsheeran的评论一样。