在java中,如何将负数作为二进制分配给int变量?
我在看如何用java表示二进制数。 一个选项是使用as在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
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好的,没错,这取决于观点