[黑马程序员]进制转换学习笔记
------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------
这篇博客早就想写了,对于进制的转换,大学老师有讲,自己也有看书学过,每次感觉都懂了,但好像又没懂似得,通过黑马的教学视频,我又感觉自己好像懂了,但以防今后会忘记,所以还是留下笔记吧,以便今后复习......
(1)十进制转二进制
原理:对十进制数进行除2运算
2 |_6__ 0
2 |__3__ 1
1 1
然后倒过来就是 110
①通过代码也可以: Integer.toBinaryString(6);
(2)二进制转十进制
原理:二进制乘以2ⁿ次方的过程
110 <-- 0×2º + 1×2¹ + 1×2²
0 + 2 + 4 = 6
①计算技巧
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
所以00110101 = 32+16+4+1 = 53
②因为128+64+32+16+8+4+2+1 = 255
所以一个字节最大255
(3)二进制转十六进制
原理:四个二进制位就是一个十六进制位
0101 1010 十进制是90
_____ _____
5 10 A
90 = 0×5A
(4)二进制转八进制
原理:三个二进制位代表一位
1011010 十进制是90
先补位
001 011 010
___ ___ ___
1 3 2
所以90 = 0132
(5)负数的二进制
-6 = 6的二进制取反加1
⒈在内存中 6 四个字节是这样表示的
00000000 00000000 00000000 00000110
⒉取反: 1-->0 0-->1
11111111 11111111 11111111 11111001
⒊加1
11111111 11111111 11111111 11111001
+ 00000000 00000000 00000000 00000001
______________________________________
11111111 11111111 11111111 11111010
这个最终的数字就是-6
①通过代码也可以: Integer.toBinaryString(-6);
②负数的最高位是1 正数的最高位是0
(6)在位运算符的时候,也设计到了进制的转换
根据上面的方法
0000-0000 0000-0000 0100-1100 1110-0110
0 0 0 0 4 12 14 6
该数十六进制的表现形式为 0x4CE6
学习了以后,我们可以这样思考:
⒈&15可以取出最后的四位
0000-0000 0000-0000 0100-1100 1110-0110 = 60
&0000-0000 0000-0000 0000-0000 0000-1111 = 15
______________________________________
0000-0000 0000-0000 0000-0000 0000-0110 = 12
⒉右移四位 再&15
0000-0000 0000-0000 0000-0100 1100-1110 | 0110 = 60>>4 = temp
&0000-0000 0000-0000 0000-0000 0000-1111 = 15
__________________________________________
0000-0000 0000-0000 0000-0000 0000-1110 = 3
通过以上方式就可以将二进制转成十六进制
①&15之后的数字
0-9 A B C D E F
0-9 10 11 12 13 14 15
(char)(12-10+'A') 即可打印出来
②int temp = 60 >>>4;
用无符号右移
因为 >> 如果是负数,前面会补1就永远也移不完了
③如果是十六进制就四位四位处理
同理如果是八进制就三位三位处理
如果是二进制就一位一位的处理
-----------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------