我有这行代码:
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