Java没有打印负二进制文件,对吗
所以,我对java相当陌生,对字节系统有点困惑。所以我制作了这个程序,将整数转换成它们的基二值Java没有打印负二进制文件,对吗,java,Java,所以,我对java相当陌生,对字节系统有点困惑。所以我制作了这个程序,将整数转换成它们的基二值 class Bits { public static void main(String[] args) { byte a; a = 5; System.out.println(Integer.toBinaryString(a)); /* prints 101 */ a = -1; System.out.pr
class Bits
{
public static void main(String[] args)
{
byte a;
a = 5;
System.out.println(Integer.toBinaryString(a)); /* prints 101 */
a = -1;
System.out.println(Integer.toBinaryString(a)); /* prints
11111111111111111111111111111111*/
}
}
它在正数上的效果和预期的一样,但当我输入负数时,它会变得很奇怪。现在我知道2的恭维是什么了,它并没有说
-1
是11111111111111
。应该是11111,对吗?当我将a
更改为int255
,将-1
作为一个字节时,当我将其切换为二进制时,我会得到正常结果11111111
。有人能给我解释一下为什么会这样,或者我做错了什么吗。(我使用的是java 8,我在mac上)Integer。toBinaryString
接受int
作为参数。因此,a
在传递给方法之前从byte
转换为int
。是的,32位整数的-1的两个补码是11111111111111
您应该尝试使用Integer.toBinaryString(a&0xFF)
。因此a
被加宽到32
位,但是24
大多数相关位通过掩蔽被丢弃。由于从字节开始
因此保留位符号,因此结果将是正确的
您可以通过将从a
转换的int截断并将其解析为int
并将其转换回字节来验证它:
int counter = 0;
for (byte a = -128; counter <= 256; ++a, ++counter)
{
byte b = (byte)(Integer.valueOf(Integer.toBinaryString(a & 0xFF), 2) & 0xFF);
System.out.println(a+" == "+b);
}
int计数器=0;
对于(字节a=-128;计数器哦,我明白了。但是0xFF是什么意思?是的,看看这里:第一个答案的最后一部分是什么意思?它会打印一个部分隐藏的整数吗?