二进制,十进制,八进制,十六进制之间的转换

  • 格式:pdf
  • 大小:47.49 KB
  • 文档页数:2

⼆进制,⼗进制,⼋进制,⼗六进制之间的转换

计算机内部只有⼆进制,包括字符数据等 int i = 15; //00000000 00000000 00000000 00001111 ==> 1字节 = 8位

1Byte = 8 bit

int 有4个字节,即32位

char c = 'a'; //00000000 01000001

计算机内部使⽤的⼆进制位都是补码的形式

(此处⽤1个字节表⽰)

15:

原码00001111 ==>补码 00001111

整数的原码和补码相同

-15:

15的原码 ==>反码+1 ==> 补码

原码00001111 ==> 反码11110000 +1 ==>补码 11110001

如果⽤2个字节表⽰-15的反码

原码00000000 00001111

反码11111111 11110001

如果⽤3个字节表⽰-15的反码

原码00000000 00000000 00001111

反码11111111 11111111 11110001

以此类推

可以⽤System.out.println(Integer.toBinaryString(a));打印验证

int i=-1;//11111111 11111111 11111111 11111111

int i = -2147483648(int中最⼩的负数)//100000000 00000000 00000000 00000000

⼗进制是⼈类的习惯 计算机在输出时候根据⼈类习惯输出10进制

赋值的时候默认是赋值10进制

计算机默认接受10进制,⾃动转换为⼆进制数据

16进制是⼆进制的简写

⽅便⼈类书写和记忆

0xff -> 11111111

转换 int x = 020;//⼋进制 0开头

⼋进制==>⼗进制

020==>2*8+0

0120 ==> 1*8^2 + 2*8^1 + 0

01234 --> 1*8^3 + 2*8^2 + 3*8 +4

x = 0x2E;//⼗六进制 0x开头

⼗六进制 ==>⼗进制

x=0x2E; ==> 2*16^1 + e =46

x= 0x1234 ==> 1*16^3 + 2*16^2 + 3*16 + 4

⼆进制 ==> ⼗进制

0000 1111 ==> 1*2^3 + 1*2^2 + 1*2 + 1 =15

0100 1001 ==> 1*2^6 + 1*2^3+1 =

⼗进制 ==>⼆进制

1)除⼆取余

28/2 14/2 7/2 3/2 1/2 0

0 0 1 1 1 0 ==>倒序1 1100

37/2 18/2 9/2 4/2 2/2

1 0 1 0 1 ==>倒序(如果需要则前⾯补0) 0001 0101

2)对应权重 (简化算法)

int x =37;

32 + 4 +1

0010 0101 // 128 64 32 16 8 4 2 1

0 0 1 0 0 1 0 1

998

998 - 512 = 486 - 256 = 230 -128 = 102 - 64 = 38 -32 =6-4 =2-2 =0

1111100110 //512 256 128 64 32 16 8 4 2 1

1 1 1 1 1 0 0 1 1 0

⼋进制 ==> ⼆进制

int x = 01234;⽤三个⼆进制位表⽰⼀个⼋进制位

000 001 010 011 100

⼗六进制 ==> ⼆进制

int x = 0x1234; ⽤4个⼆进制表⽰⼀个16进制位

0001 0010 0011 0100

0x12345678==>0001 0010 0011 0100 0101 0110 0111 1000

⼆进制 ==> 16进制

0000 0111 1111 1110 ==> 0x07FE;

⼀般⽤16进制表⽰⼆进制

例x = 0x7FE ;//0000 0111 1111 1110,直接赋值则以为是⼋进制(因为以0开头)