二进制

对于任何已知类型的传统计算机而言,均以1和0作为编码形式进行程序计算。

在电路结构中,高电平与低电平对应表示1和0。

计算机内部表示任何数据都是用二进制。而与人进行交互时,可以将数据转换成人可以理解的内容:10进制、文字、图片、音频视频。

不同进制的计算方式是相通的:

十进制十进制逢十进一

二进制二进制逢二进一

9 1 --> 10

1 1 --> 10

99 1 --> 100

11 1 --> 100

从0开始一直加1:

十进制 二进制

0

0

1

1

2

10

3

11

4

100

5

101

6

110

7

111

8

1000

9

1001

10

1010

11

1011

. ..

...

128

10000000

十进制乘10和二进制乘2运算比较:

十进制乘10

二进制乘2

93*10 --> 930

1*2 --> 10

930*10 --> 9300

10*2 --> 100

9300*10 --> 93000

100*2 --> 1000

93000*10 --> 930000

1000*2 --> 10000

常用的二进制值:

十进制

二进制

用2的指数表示

1

1

2^0

2

10

2^1

4

100

2^2

8

1000

2^3

16

10000

2^4

32

100000

2^5

64

1000000

2^6

128

10000000

2^7

256

100000000

2^8

512

1000000000

2^9

1024

10000000000

2^10

2048

100000000000

2^11

4096

1000000000000

2^12

8192

10000000000000

2^13

每加一个0都是乘2,所以用2的指数来表示。

例如 10000000,1后面有7位,就可以用2的7次方表示。

用2的指数可以很方便的表示任意的数字值:

10进制

2进制

2的指数

1

00000001

2^0

8

00001000

2^3

16

00010000

2^4

32

00100000

2^5

相加

相加

57

00111001

bit 和 byte

bit - 位

byte - 字节

2进制拨码表(十进制与二进制)(1)

一个 bit 表示一个电位,1 或 0;一个 byte 表示 8 个电位。

个人安装的光纤宽带如果是 100 兆宽带,下载最高速度只能到十几兆,这是因为采用的表示单位不同。100兆宽带指的是100兆bit,我们一般说下载速度指的是byte,那么100兆bit换算成byte需要除8,也就是 12.5 兆 byte。

java 中的 byte 类型

java 中的 byte 类型整数是单字节类型,也就是说,它使用 8 位(bit) 来表示整数。

8 位(bit)能表示的数字:

10进制

2进制

0

00000000

1

00000001

2

00000010

3

00000011

4

00000100

5

00000101

6

00000110

7

00000111

8

00001000

...

...

255

11111111

但是,java中,byte类型的左侧的一位规定用来表示符号,0表示正数,1表示负数。那么它表示数字的位就只有7位,而不是8位:

java 中 byte 类型表示正数:

10进制

2进制

0

00000000

1

00000001

2

00000010

3

00000011

4

00000100

5

00000101

6

00000110

7

00000111

8

00001000

...

...

127

01111111

java 中 byte 类型表示负数:

java 的 byte 类型如何表示负数?我们先从 0-1 这个运算来看:

java 中的负数运算,执行的是与正数相同的加减运算,这样执行 0-1 运算得到的二进制值是 11111111,表示 -1,那么可以以此类推,继续执行减1运算减到最小:

-128

10000000

...

...

-8

11111000

-7

11111001

-6

11111010

-5

11111011

-4

11111100

-3

11111101

-2

11111110

-1

11111111

10进制

2进制

0

00000000

1

00000001

2

00000010

3

00000011

4

00000100

5

00000101

6

00000110

7

00000111

8

00001000

...

...

127

01111111

四种整数类型的最小和最大值

与 byte 类型同理,short,int 和 long 也是用相同的方式表示整数。这四种类型的最小值和最大值分别可以这样表示:

byte(1字节,8位):

2进制

2的指数

最小

10000000

-2^7

最大

01111111

2^7 - 1

short(2字节,16位):

2进制

2的指数

最小

10000000 00000000

-2^15

最大

01111111 11111111

2^15 - 1

int(4字节,32位):

2进制

2的指数

最小

10000000 00000000 00000000 00000000

-2^31

最大

01111111 11111111 11111111 11111111

2^31 - 1

long(8字节,64位):

2进制

2的指数

最小

10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

-2^63

最大

01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

2^63 - 1

二进制和十进制的互转

java 中提供了二进制和十进制的互转方法:

十进制转二进制

Integer.toBinaryString(int i)

String s = Integer.toBinaryString(257);

System.out.println(s);

// 打印结果: 100000001

1

2

3

4

二进制转十进制

Integer.parseInt(String s, int radix)

- 第二个参数指定进制

- 这里不支持直接使用负数的二进制码来表示负数,而是要用正数的二进制码添加负号来表示

int a = Integer.parseInt("1100101101", 2);

System.out.println(a);

// 打印结果: 813

,