我有这行代码:

System.out.println("Flipped byte: " + ((~ Integer.parseInt(Integer.toString(byteRepresentation[8], 2), 2)) & 0xFF));


字节签名的事实在这里给我带来了麻烦。 byteRepresentation是字节数组(java字节基元)。当byteRepresentation [8]是一个正数(+)时,它可以正常工作,但是当byteRepresentation [8]是一个负数(-)时,它只减去负号(使结果为正数)并减去1。

我正在寻找一种方法,例如使-127变为0,-126变为1,依此类推。

最佳答案

行为是正确的。 ~只是翻转所有位,然后将其解释为twos complement

您只想在数字上加上+127,即可获得所需的行为(-127-> 0,-126-> 1)

一个例子

〜(1)->〜(00000001)-> 11111110-> -2


System.out.println(〜1); // -2


〜(-1)-| 〜(11111111)-> 00000000-> 0


System.out.println(〜-1); // 0

09-26 01:16