“Java中的整型”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) (→怎么验证呢?) |
||
第398行: | 第398行: | ||
|1 | |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> |
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