Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java没有打印负二进制文件,对吗_Java - Fatal编程技术网

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

所以,我对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.println(Integer.toBinaryString(a)); /* prints
        11111111111111111111111111111111*/
    }
}

它在正数上的效果和预期的一样,但当我输入负数时,它会变得很奇怪。现在我知道2的恭维是什么了,它并没有说
-1
11111111111111
。应该是11111,对吗?当我将
a
更改为int
255
,将
-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是什么意思?是的,看看这里:第一个答案的最后一部分是什么意思?它会打印一个部分隐藏的整数吗?