“Java中的整型”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“=== 怎样输出整型的二进制形式 === <syntaxhighlight lang="java"> public class Test { public static void main(String[] args) { System.out.p…”的新页面)
 
(Jihongchang移动页面Java中整型的二进制和十进制Java中的整型
 
(未显示同一用户的3个中间版本)
第15行: 第15行:
 
binary string of 7: 111
 
binary string of 7: 111
 
binary string of -7: 11111111111111111111111111111001
 
binary string of -7: 11111111111111111111111111111001
 +
</syntaxhighlight>如果想要正数显示全 ,可以:<syntaxhighlight lang="java">
 +
public class Test {
 +
 +
    public static void main(String[] args) {
 +
 +
        System.out.printf("binary string of %d: %s\n", 7, String.format("%32s", Integer.toBinaryString(7)).replace(' ', '0'));
 +
 +
        System.out.printf("binary string of %d: %s\n", -7, Integer.toBinaryString(-7));
 +
 +
    }
 +
 +
}
 +
</syntaxhighlight><syntaxhighlight lang="console">
 +
binary string of 7: 00000000000000000000000000000111
 +
binary string of -7: 11111111111111111111111111111001
 +
</syntaxhighlight>int 4个字节(byte),32位(bit),1个符号位(0-正,1-负),
 +
 +
==== 正数 ====
 +
就是十进制转二进制,其余位(bit)为0;
 +
{| class="wikitable"
 +
!1
 +
符号位
 +
!2
 +
!3
 +
!4
 +
!5
 +
!6
 +
!7
 +
!8
 +
!9
 +
!10
 +
!11
 +
!12
 +
!13
 +
!14
 +
!15
 +
!16
 +
!17
 +
!18
 +
!19
 +
!20
 +
!21
 +
!22
 +
!23
 +
!24
 +
!25
 +
!26
 +
!27
 +
!28
 +
!29
 +
!30
 +
2<sup>2</sup>
 +
!31
 +
2<sup>1</sup>
 +
!32
 +
2<sup>0</sup>
 +
|-
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|1
 +
|1
 +
|1
 +
|}
 +
2<sup>2</sup>+2<sup>1</sup>+2<sup>0</sup>=4+2+1=7
 +
 +
==== 负数 ====
 +
则是补码存储:
 +
 +
①十进制转为二进制得到:
 +
{| class="wikitable"
 +
!1
 +
符号位
 +
!2
 +
!3
 +
!4
 +
!5
 +
!6
 +
!7
 +
!8
 +
!9
 +
!10
 +
!11
 +
!12
 +
!13
 +
!14
 +
!15
 +
!16
 +
!17
 +
!18
 +
!19
 +
!20
 +
!21
 +
!22
 +
!23
 +
!24
 +
!25
 +
!26
 +
!27
 +
!28
 +
!29
 +
!30
 +
2<sup>2</sup>
 +
!31
 +
2<sup>1</sup>
 +
!32
 +
2<sup>0</sup>
 +
|-
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|0
 +
|1
 +
|1
 +
|1
 +
|}
 +
②然后取反码,再得到:
 +
{| class="wikitable"
 +
!1
 +
符号位
 +
!2
 +
!3
 +
!4
 +
!5
 +
!6
 +
!7
 +
!8
 +
!9
 +
!10
 +
!11
 +
!12
 +
!13
 +
!14
 +
!15
 +
!16
 +
!17
 +
!18
 +
!19
 +
!20
 +
!21
 +
!22
 +
!23
 +
!24
 +
!25
 +
!26
 +
!27
 +
!28
 +
!29
 +
!30
 +
2<sup>2</sup>
 +
!31
 +
2<sup>1</sup>
 +
!32
 +
2<sup>0</sup>
 +
|-
 +
|0
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|0
 +
|0
 +
|0
 +
|}
 +
③反码再+1,得到补码:
 +
{| class="wikitable"
 +
!1
 +
符号位
 +
!2
 +
!3
 +
!4
 +
!5
 +
!6
 +
!7
 +
!8
 +
!9
 +
!10
 +
!11
 +
!12
 +
!13
 +
!14
 +
!15
 +
!16
 +
!17
 +
!18
 +
!19
 +
!20
 +
!21
 +
!22
 +
!23
 +
!24
 +
!25
 +
!26
 +
!27
 +
!28
 +
!29
 +
!30
 +
2<sup>2</sup>
 +
!31
 +
2<sup>1</sup>
 +
!32
 +
2<sup>0</sup>
 +
|-
 +
|0
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|0
 +
|0
 +
|1
 +
|}
 +
④最后,首位(bit)是符号,值为二进制的1,表示负数:
 +
{| class="wikitable"
 +
!1
 +
符号位
 +
!2
 +
!3
 +
!4
 +
!5
 +
!6
 +
!7
 +
!8
 +
!9
 +
!10
 +
!11
 +
!12
 +
!13
 +
!14
 +
!15
 +
!16
 +
!17
 +
!18
 +
!19
 +
!20
 +
!21
 +
!22
 +
!23
 +
!24
 +
!25
 +
!26
 +
!27
 +
!28
 +
!29
 +
!30
 +
2<sup>2</sup>
 +
!31
 +
2<sup>1</sup>
 +
!32
 +
2<sup>0</sup>
 +
|-
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|1
 +
|0
 +
|0
 +
|1
 +
|}
 +
 +
 +
=== 怎么验证呢? ===
 +
java8中已经加入了在声明整型变量时对二进制形式字面量声明的支持:<syntaxhighlight lang="java">
 +
public class Test1 {
 +
 +
    public static void main(String[] args) {
 +
 +
        int a = 0b00000000000000000000000000000111;
 +
        int b = 0b11111111111111111111111111111001;
 +
        System.out.printf("a=%d\n", a);
 +
        System.out.printf("b=%d\n", b);
 +
 +
    }
 +
 +
}
 +
</syntaxhighlight><syntaxhighlight lang="console">
 +
a=7
 +
b=-7
 
</syntaxhighlight>
 
</syntaxhighlight>

2022年11月11日 (五) 17:48的最新版本

怎样输出整型的二进制形式

public class Test {

    public static void main(String[] args) {

        System.out.printf("binary string of %d: %s\n", 7, Integer.toBinaryString(7));

        System.out.printf("binary string of %d: %s\n", -7, Integer.toBinaryString(-7));

    }

}
binary string of 7: 111
binary string of -7: 11111111111111111111111111111001

如果想要正数显示全 ,可以:

public class Test {

    public static void main(String[] args) {

        System.out.printf("binary string of %d: %s\n", 7, String.format("%32s", Integer.toBinaryString(7)).replace(' ', '0'));

        System.out.printf("binary string of %d: %s\n", -7, Integer.toBinaryString(-7));

    }

}
binary string of 7: 00000000000000000000000000000111
binary string of -7: 11111111111111111111111111111001

int 4个字节(byte),32位(bit),1个符号位(0-正,1-负),

正数

就是十进制转二进制,其余位(bit)为0;

1

符号位

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

22

31

21

32

20

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

22+21+20=4+2+1=7

负数

则是补码存储:

①十进制转为二进制得到:

1

符号位

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

22

31

21

32

20

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

②然后取反码,再得到:

1

符号位

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

22

31

21

32

20

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0

③反码再+1,得到补码:

1

符号位

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

22

31

21

32

20

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1

④最后,首位(bit)是符号,值为二进制的1,表示负数:

1

符号位

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

22

31

21

32

20

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1


怎么验证呢?

java8中已经加入了在声明整型变量时对二进制形式字面量声明的支持:

public class Test1 {

    public static void main(String[] args) {

        int a = 0b00000000000000000000000000000111;
        int b = 0b11111111111111111111111111111001;
        System.out.printf("a=%d\n", a);
        System.out.printf("b=%d\n", b);

    }

}
a=7
b=-7