在java中,如何将负数作为二进制分配给int变量?

在java中,如何将负数作为二进制分配给int变量?,java,binary,Java,Binary,我在看如何用java表示二进制数。 一个选项是使用asString并使用Integer.parseInt()获取十进制值 另一个选项(将2分配给b): 输出: 2 11111111111111111111111111111110 使用此格式,如何表示-2: int c=??//-b int值以32位存储,其中最高有效位为符号 0b0010; //2 实际上是 0b00000000_00000000_00000000_00000010; //2 要将其转换为负数,请将0s翻转为1s,将1s

我在看如何用java表示二进制数。 一个选项是使用as
String
并使用
Integer.parseInt()
获取
十进制值

另一个选项(将2分配给
b
):

输出:

2
11111111111111111111111111111110
使用此格式,如何表示-2:

int c=??//-b

int
值以32位存储,其中最高有效位为符号

0b0010; //2
实际上是

0b00000000_00000000_00000000_00000010; //2
要将其转换为负数,请将
0
s翻转为
1
s,将
1
s翻转为
0
s`并添加1。所以

0b00000000_00000000_00000000_00000010; //2
0b11111111_11111111_11111111_11111101
0b11111111_11111111_11111111_11111110; // +1
诸如此类

int b = 0b11111111_11111111_11111111_11111110;

将具有值
-2

int
值存储在32位中,其中最高有效位是符号

0b0010; //2
实际上是

0b00000000_00000000_00000000_00000010; //2
要将其转换为负数,请将
0
s翻转为
1
s,将
1
s翻转为
0
s`并添加1。所以

0b00000000_00000000_00000000_00000010; //2
0b11111111_11111111_11111111_11111101
0b11111111_11111111_11111111_11111110; // +1
诸如此类

int b = 0b11111111_11111111_11111111_11111110;

将具有值
-2

您将存储与表示混淆了
int b
没有基,无论您是将
2
0b010
还是
0x02
分配给它。基数10只是一些
println
假设的东西


您可以使用
Integer.toString(数字,基数)
打印正确签名的二进制数。

您将存储与表示混淆了
int b
没有基,无论您是将
2
0b010
还是
0x02
分配给它。基数10只是一些
println
假设的东西

您可以使用
Integer.toString(数字,基数)
打印正确签名的二进制数。

使用运算符:

00000000000000000000000000000010 // 2 = 0b0010
00000000000000000000000000000001 // 1 = 0b0010-0b0001
11111111111111111111111111111110 // ~1 = ~(0b0010-0b0001)

11111111111111111111111111111110 // -2 = ~(0b0010-0b0001)
int b = ~(0b0010-0b0001); // ~(2-1) = ~1 = -2
System.out.println(b);
System.out.println(Integer.toBinaryString(b));
因此,您只需减去
0b001
,然后使用
~
逐位运算符翻转所有位:

00000000000000000000000000000010 // 2 = 0b0010
00000000000000000000000000000001 // 1 = 0b0010-0b0001
11111111111111111111111111111110 // ~1 = ~(0b0010-0b0001)

11111111111111111111111111111110 // -2 = ~(0b0010-0b0001)
int b = ~(0b0010-0b0001); // ~(2-1) = ~1 = -2
System.out.println(b);
System.out.println(Integer.toBinaryString(b));
使用操作员:

00000000000000000000000000000010 // 2 = 0b0010
00000000000000000000000000000001 // 1 = 0b0010-0b0001
11111111111111111111111111111110 // ~1 = ~(0b0010-0b0001)

11111111111111111111111111111110 // -2 = ~(0b0010-0b0001)
int b = ~(0b0010-0b0001); // ~(2-1) = ~1 = -2
System.out.println(b);
System.out.println(Integer.toBinaryString(b));
因此,您只需减去
0b001
,然后使用
~
逐位运算符翻转所有位:

00000000000000000000000000000010 // 2 = 0b0010
00000000000000000000000000000001 // 1 = 0b0010-0b0001
11111111111111111111111111111110 // ~1 = ~(0b0010-0b0001)

11111111111111111111111111111110 // -2 = ~(0b0010-0b0001)
int b = ~(0b0010-0b0001); // ~(2-1) = ~1 = -2
System.out.println(b);
System.out.println(Integer.toBinaryString(b));

你熟悉算术吗?@vandale:我非常熟悉二的补码。我感兴趣的是表示法,而不是如何计算负二进制数。2的补码依赖于一个固定的字长,因此必须暗示值是,比如说32位长。你熟悉算术吗?@vandale:我非常熟悉2的补码。我感兴趣的是表示法,而不是如何计算负二进制数。2的补码依赖于固定的字长,因此必须暗示值是,比如说32位长。哦,要表示负数,我需要输入所有32位,而对于正数,如2,
0b0010
就足够了。@WangerToLearn Right,因为它是决定符号的第一位,所以您需要将所有位放在它和您试图表示的值之间。@SotiriosDelimanolis抱歉,但我认为您没有权利。检查我的答案@如果我们谈论的是两件不同的事情。如果要使用整数文本以二进制形式表示
-2
,则需要指定所有位。获取
-2
的另一种方法是按照您的建议使用
~
运算符。另一种选择是只写
-2
。另一种方法是编写
0-2
。很恶心。@SotiriosDelimanolis好的,这取决于视角哦,要表示负数,我需要输入所有32位,而对于正数,如2,
0b0010
就足够了。@eartoLearn right,因为它是决定符号的第一位,您需要将所有的位放在它和您试图表示的值之间。@SotiriosDelimanolis抱歉,但我认为您不正确。检查我的答案@如果我们谈论的是两件不同的事情。如果要使用整数文本以二进制形式表示
-2
,则需要指定所有位。获取
-2
的另一种方法是按照您的建议使用
~
运算符。另一种选择是只写
-2
。另一种方法是编写
0-2
。很恶心。@SotiriosDelimanolis好的,没错,这取决于观点