二进制,十进制,八进制,十六进制之间的转换
- 格式: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开头)